我拥有的用户应该可以访问数据库中的所有表 - SELECT,INSERT,UPDATE,DELETE和EXECUTE(ASP代码责备:-P),除了1个表,例如users
。
授予db_datareader
和db_datawriter
时,这会授予他们对所有内容的完全访问权限,并且删除users
表上的DELETE权限将无效。
有超过60个表,并且正在寻找比使用SSMS更快地遍历每个表并执行此操作的方法。
我该怎么做呢?
答案 0 :(得分:4)
您可以明确拒绝应该优先使用的权限。语法是
deny delete on dbo.users to username
答案 1 :(得分:0)
你可以使用hacky游标和sp_executeSQL(GRANT不能采用变量表名)
declare ctable cursor for
select Name from sysobjects where type = 'u'
declare @Name sysname
declare @ExecSQL nvarchar(512)
open ctable
fetch next FROM ctable into @Name
while (@@FETCH_STATUS = 0)
begin
if (@Name <> 'MyTableToExclude')
BEGIN
SET @ExecSQL = 'grant SELECT on ' + @Name + ' to PUBLIC'
EXEC sp_executesql @ExecSQL
...等
END
fetch next FROM ctable into @Name
end
close ctable
deallocate ctable
轻微......请注意,您无法在表格上授予exec;)