У меня есть следующий T-SQL для отображения всех разрешений, предоставленных принципалам на моем SQL-сервере 2005:
select dp.NAME AS principal_name, --1
dp.type_desc AS principal_type_desc, --2
o.NAME AS object_name, --3
p.permission_name, --4
p.state_desc AS permission_state_desc --5
from sys.database_permissions p
left OUTER JOIN sys.all_objects o
on p.major_id = o.OBJECT_ID
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
order by principal_name, object_name
Результат отображает общедоступный с предоставленным SELECT:
1 2 3 4 5
...
public DATABASE_ROLE system_views SELECT GRANT
....
Я думаю, имя_объекта system_views предназначено для всех представлений в моей базе данных. Представления | папка system_views. Я попробовал следующий T-SQL (просто чтобы проверить, работает ли он снова GRANT):
GRANT SELECT ON system_views TO public
Я получил ошибку "Не удается найти объект 'system_views', потому что он не существует или у вас нет разрешения». Я подключаю SQL-сервер как sa.
Мой вопрос заключается в том, как отозвать разрешение SELECT для system_views для общего доступа (пользователя или участника?) И отменить разрешение, если потребуется. Второй вопрос: есть ли у отзыва system_views для public какой-либо побочный эффект для других пользователей?