Предоставьте SELECT, UPDATE, INSERT, DELETE всем таблицам, кроме 1 (или более) в SQL Server 2005 - PullRequest
1 голос
/ 10 августа 2010

Пользователь, который у меня есть, должен иметь доступ ко всем таблицам в базе данных - SELECT, INSERT, UPDATE, DELETE и EXECUTE (код ASP виноват :-P), кроме 1 таблицы, например. users.

При предоставлении db_datareader и db_datawriter это дает им полный доступ ко всему, и удаление разрешения DELETE для таблицы users не будет работать.

Существует более 60 таблиц, и мы искали более быстрый способ, чем использовать SSMS, чтобы просмотреть каждую таблицу и сделать это.

Как бы я поступил так?

Ответы [ 2 ]

4 голосов
/ 10 августа 2010

Вы можете явно запретить разрешения, которые должны иметь приоритет. Синтаксис

deny delete on dbo.users to username
0 голосов
/ 10 августа 2010

Вы можете использовать хакерский курсор и 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

Minor ... обратите внимание, что выне может предоставить exec для таблиц;)

...