将SELECT,UPDATE,INSERT,DELETE授予SQL Server 2005中除1(或更多)之外的所有表

时间:2010-08-10 11:05:52

标签: sql-server-2005 security roles

我拥有的用户应该可以访问数据库中的所有表 - SELECT,INSERT,UPDATE,DELETE和EXECUTE(ASP代码责备:-P),除了1个表,例如users

授予db_datareaderdb_datawriter时,这会授予他们对所有内容的完全访问权限,并且删除users表上的DELETE权限将无效。

有超过60个表,并且正在寻找比使用SSMS更快地遍历每个表并执行此操作的方法。

我该怎么做呢?

2 个答案:

答案 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;)