关于数据库用户(角色)权限的定义
1、给用户赋予具体不同权限的问题。
网站用到a,b,c三个数据库,现在的程序里使用了同一个数据库用户(dbuser)来访问。现在希望dbuser只具有a,b,c的select,update,delete 和执行存储过程的权限(也就是说,不希望dbuser有创建表,创建存储过程,更改存储过程,删除存储过程,删除表)。
db_datareader和db_datawriter具有大部分我希望的权限,但是这两个角色还不具备执行存储过程的权限。我自己创建了一个角色,但是想把执行存储过程的权限加到这个角色的话,需要把每一个存储过程打钩,有没有一个好的办法呢?
用GRANT 命令怎么把所有存储过程执行的权限赋值给一个角色或者一个登录呢?
2.除了上述问题需要解决以外,我还希望实现:
dbuser只能通过asp.net程序来访问数据库,拒绝使用企业管理器或者查询分析器连接,该如何实现呢?
------解决方案--------------------declare @strSQL varchar(150)
declare @strname varchar(50)
declare @intCursorNo int
--表的权限设置
declare cursor1 scroll cursor for select name from sysobjects where xtype= 'u ' for read only
open cursor1
set @intCursorNo=1
while(@intCursorNo <= @@cursor_rows)
begin
fetch absolute @intCursorNo from Cursor1 into @strname
--允许
set @strSQL= 'grant select, insert , delete , update ,references on [dbo].[ '+ @strname+ '] to [ '+@strUserID+ '] '
--拒绝
set @strSQL= 'deny select, insert , delete , update ,references on [dbo].[ '+ @strname+ '] to [ '+@strUserID+ '] '
exec(@strSQL)
set @intCursorNo=@intCursorNo+1
end
close Cursor1
deallocate Cursor1
--存储过程权限设置
declare cursor1 scroll cursor for select name from sysobjects where xtype= 'p ' for read only
open cursor1
set @intCursorNo=1
while(@intCursorNo <= @@cursor_rows)
begin
fetch absolute @intCursorNo from Cursor1 into @strname
--允许
set @strSQL= 'grant execute on [dbo].[ '+ @strname+ '] to [ '+@strUserID+ '] '
--拒绝
set @strSQL= 'deny execute on [dbo].[ '+ @strname+ '] to [ '+@strUserID+ '] '
exec(@strSQL)
set @intCursorNo=@intCursorNo+1
end
close Cursor1
deallocate Cursor1
---函数权限设置
declare cursor1 scroll cursor for select name from sysobjects where xtype= 'Fn ' for read only
open cursor1
set @intCursorNo=1
while(@intCursorNo <= @@cursor_rows)
begin
fetch absolute @intCursorNo from Cursor1 into @strname
--允许
set @strSQL= 'grant execute on [dbo].[ '+ @strname+ '] to [ '+@strUserID+ '] '
--拒绝
set @strSQL= 'deny execute on [dbo].[ '+ @strname+ '] to [ '+@strUserID+ '] '
exec(@strSQL)
set @intCursorNo=@intCursorNo+1
end
close Cursor1
deallocate Cursor1
--楼主看看吧:)