Выполнение некоторых действий не требует явного разрешения и доступно по умолчанию. Эти действия могут быть выполнены только членами ролей сервера или владельцамиобъектов в базе данных.
Неявные права не предоставляются пользователю непосредственно, он получает их лишь при определенных обстоятельствах. Например, пользователь может статьвладельцем объекта базы данных, только если сам создаст объект либо если кто-то другой передаст ему право владения своим объектом. Таким образом владелец объекта автоматически получит права на выполнение любых действий с объектом, в том числе и на предоставление доступа к объекту другим пользователям. Эти права нигде не указываются, выполнять любые действия позволяет только факт владения объектом.
Система безопасности SQL Server имеет иерархическую структуру, и поэтому роли базы данных включают в себя учетные записи и группы Windows NT, пользователей и ролиSQL Server. Пользователь же, в свою очередь, может участвовать в нескольких ролях и одновременно иметь разные права доступа для разных ролей. Когда одна из ролей, в которых состоит пользователь, имеет разрешение на доступ к данным, он автоматически имеет аналогичные права. Тем не менее, если возникает необходимость,пользователю можно запретить доступ к данным или командам, тогда аннулируются все разрешения на доступ, полученные им на любом уровне иерархии. При этом гарантируется, что доступ останется запрещенным независимо от разрешений, предоставленных на более высоком уровне.
Для запрещения доступа к объектам базы данных используется команда:
<запрещение_доступа>::=
DENY {ALL [PRIVILEGES]| | <привилегия>
[,...n]}
{ [(имя_столбца [,...n])]
ON { имя_таблицы |
имя_просмотра}
| ON {имя_таблицы | имя_просмотра }
[имя_столбца [,...n])]
| ON {имя_хранимой_процедуры |
имя_внешней_процедуры}}
TO {имя_пользователя | имя_группы |
имя_роли}
[,...n]
[CASCADE ]
Параметр CASCADE позволяет отзывать права не только у конкретного пользователя, но также и у всех тех, кому он предоставил аналогичные права.
Для запрещения выполнения команд SQL применяется оператор:
<запрещение_выполнения>::=
DENY {ALL | <команда>[,...n]}
TO {имя_пользователя | имя_группы |
имя_роли} [,...n]
Неявное отклонение подобно запрещению доступа с тем отличием, что оно действует только на том уровне, на котором определено. Если пользователю на определенном уровне неявно отклонен доступ, он все же может получить его на другом уровне иерархии через членство в роли, имеющей право просмотра. По умолчанию доступпользователя к данным неявно отклонен . Для неявного отклонения доступа к объектам базы данных используется команда:
<неявное_отклонение_доступа>::=
REVOKE [GRANT OPTION FOR]
{ALL [ PRIVILEGES]| | <привилегия>
[,...n]}
{ [(имя_столбца [,...n])] ON
{ имя_таблицы | имя_просмотра}
| ON {имя_таблицы |
имя_просмотра }
[имя_столбца [,...n])]
| ON {имя_хранимой_процедуры |
имя_внешней_процедуры}}
TO | FROM {имя_пользователя |
имя_группы |
имя_роли}[,...n]
[CASCADE ]
[AS {имя_группы | имя_роли }]
Для неявного отклонения разрешения на выполнение команд SQL используется следующая команда:
<неявное_отклонение_разрешения>::=
REVOKE {ALL | <команда>[,...n]}
FROM {имя_пользователя | имя_группы |
имя_роли}[,...n]
Смысл параметров аналогичен параметрам команд GRANT и DENY. Параметр GRANT OPTION FOR используется, когда необходимо отозвать право, предоставленное параметромWITH GRANT OPTION команды GRANT. Пользователь сохраняет разрешение на доступ к объекту, но теряет возможность предоставлять это разрешение другим пользователям.