Ответ 1
Вы не можете отменить все на схеме:: dbo своему пользователю, но вы можете...
REVOKE select,update,delete,insert,execute,references on schema::DBO to USER
Как мне заменить разрешение ALL сейчас, когда оно было отменено:
REVOKE ALL ON dbo.MyObject TO MyUser
Я просматриваю все объекты в базе данных и отменяю все разрешения для конкретного пользователя. Поэтому, если мне нужно было указать, какое разрешение будет отменено, это будет настоящая проблема, потому что мне нужно будет выяснить, какой у меня объект, а затем отменить все возможные разрешения для этого типа объекта. Вместо просто REVOKE ALL.
Вы не можете отменить все на схеме:: dbo своему пользователю, но вы можете...
REVOKE select,update,delete,insert,execute,references on schema::DBO to USER
Если вы хотите получить список защищенных документов, которым предоставлено разрешение базы данных, смотрите не дальше, чем 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).
Другим вариантом может быть просто удаление и повторное добавление принципала. Отбрасывание принципала будет избавляться от любых разрешений, связанных с ним напрямую, и повторное добавление его не дает никаких (если вы специально не предоставите их). Это может быть другой вариант (но сначала проверьте его!).
Вам действительно нужно иметь представление о том, какие разрешения вы хотите получить у пользователя. у вас есть шаблон "Просто отмените все, а затем верните все, что было до этого...".
Если вам действительно нужно это сделать, вам нужно будет сохранить собственную запись о том, с чего должны были начаться разрешения.
Лучшим решением было бы иметь представление о том, какие разрешения должны быть. Кто знает? Возможно, они ошибались раньше!