web应用程序的SqlServer的安全考虑

来源:互联网 发布:淘宝服装摆拍视频教程 编辑:程序博客网 时间:2024/06/05 18:01

不知道大家在web程序中使用的数据库账号都是什么权限,反正我一直都用的是数据库的所有者(比用sa的人要清醒一点)。

前几天,网站程序出现了一个小故障,经过检查才发现存储过程被改动了。这个事件在次把安全问题 摆到了桌面。我们到底要等到入侵者做到什么程度才会考虑数据库的安全问题呢?
首先,用数据库所有者这个账号连接,有如下权限:
1、查询
2、创建、更新、删除记录
3、创建、更新、删除表
4、创建、更新、删除视图和存储过程

而我们网站的大多数应用只需要:
1、查询表和视图
2、创建、更新、删除记录
3、执行存储过程

 

那么我们网站使用的数据库登录到底应该是什么角色,应该具有什么权限呢?
1、public ,这是必须的。
2、db_dataReader 。读取记录和执行查询语句。
3、db_dataWriter。 插入、更新和删除记录。

这里缺少一个执行存储过程的角色,只能手动为所有存储过程加上当前登录执行的权限。如果一个库的存储过程很多,则可以用下面这个存储过程来批量加上这个权限:

CREATE procedure sp_GrantProce(@username varchar(40))
as
begin
    declare @user varchar(100),@name varchar(100)
    declare t_cursor cursor for
    select user_name(uid) as users,name from sysobjects where (xtype='P' or xtype='X') and status>0
   
    open t_cursor
   
    fetch next from t_cursor into @user,@name
   
    while @@fetch_status=0
    begin
        exec('grant execute on
'+@user+'.'+@name+' to '+@username)
        fetch next from t_cursor into @user,@name
    end
   
    close t_cursor
    deallocate t_cursor
end

 然后执行这个存储过程,并带上你将要加上存储过程执行权限的登录名称即可。