您的位置:首页 > 数据库

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

2007-03-14 12:30 330 查看
不知道大家在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

然后执行这个存储过程,并带上你将要加上存储过程执行权限的登录名称即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: