Как заменить REVOKE ALL в SQL Server 2008 R2

Как мне заменить разрешение ALL сейчас, когда оно было отменено:

REVOKE ALL ON dbo.MyObject TO MyUser

Я просматриваю все объекты в базе данных и отменяю все разрешения для конкретного пользователя. Поэтому, если мне нужно было указать, какое разрешение будет отменено, это будет настоящая проблема, потому что мне нужно будет выяснить, какой у меня объект, а затем отменить все возможные разрешения для этого типа объекта. Вместо просто REVOKE ALL.

Ответы

Ответ 1

Вы не можете отменить все на схеме:: dbo своему пользователю, но вы можете...

REVOKE select,update,delete,insert,execute,references on schema::DBO to USER

Ответ 2

Если вы хотите получить список защищенных документов, которым предоставлено разрешение базы данных, смотрите не дальше, чем sys.database_permissions. Как интерпретировать столбцы major_id и minor_id зависит от значения столбца класса (например, если class= 1, затем major_id = object_id и minor_id = column_id). Я оставляю это как упражнение для читателя (посмотрите здесь запись BOL: http://msdn.microsoft.com/en-us/library/ms187719.aspx).

Другим вариантом может быть просто удаление и повторное добавление принципала. Отбрасывание принципала будет избавляться от любых разрешений, связанных с ним напрямую, и повторное добавление его не дает никаких (если вы специально не предоставите их). Это может быть другой вариант (но сначала проверьте его!).

Ответ 3

Вам действительно нужно иметь представление о том, какие разрешения вы хотите получить у пользователя. у вас есть шаблон "Просто отмените все, а затем верните все, что было до этого...".

Если вам действительно нужно это сделать, вам нужно будет сохранить собственную запись о том, с чего должны были начаться разрешения.

Лучшим решением было бы иметь представление о том, какие разрешения должны быть. Кто знает? Возможно, они ошибались раньше!