Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Microsoft SQL Server 2005 для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

5.3.6. Предоставление прав на объекты в базе данных

Разрешения для объектов баз данных SQL Server 2005, GRANT, DENY, REVOKE, эффективные разрешения

Если вы решили не применять встроенные роли баз данных, а воспользоваться обычными объектами пользователей (или пользовательскими ролями), то следующее действие — предоставление разрешений на объекты базы данных.

Объектов в базе данных, на которые можно предоставлять разрешения, в SQL Server 2005 стало намного больше по сравнению с предыдущими версиями SQL Server. В добавление к привычным таблицам, представлениям, хранимым процедурам и функциям теперь можно предоставлять разрешения на такие объекты, как роли, пользователи баз данных, сертификаты и ассиметричные ключи, наборы схем XML, сборки .NET и т. п. Полный список объектов, на которые можно предоставлять разрешения, был приведен в разд. 5.1.

Однако главное принципиальное изменение, которое произошло в SQL Server 2005, — это появление возможности предоставлять разрешения на уровне схемы. К схеме в SQL Server 2005 могут относиться таблицы, представления, хранимые процедуры, пользовательские функции, ограничения целостности, пользовательские типы данных и другие объекты, на которые приходится предоставлять разрешения чаще всего. Если вы назначите пользователю разрешения на схему, то он получит разрешения на все объекты этой схемы.

Работа с разрешениями производится одинаково для всех объектов базы данных:

q      на вкладке Permissions свойств этого объекта (эта вкладка, правда, предусмотрена не для всех объектов, для которых можно предоставить разрешения);

q      при помощи команд GRANT (предоставить разрешение), DENY (явно запретить что-то делать) и REVOKE (отменить явно предоставленное разрешение или запрет).

Далее перечислены разрешения, которые можно предоставить на уровне схемы. Мы приведем только разрешения для этого объекта, поскольку, во-первых, разрешения в большинстве случаев придется предоставлять именно на уровне схемы, а во-вторых, разрешения схемы включают в себя разрешения, которые можно предоставить другим объектам, например, разрешения SELECT для таблиц и представлений и EXECUTE для хранимых процедур.

q      ALTER — возможность вносить любые изменения в свойства объекта (за исключением смены владельца). На уровне базы данных можно настроить права ALTER ANY ... — возможность вносить изменения в любые объекты данного типа в базе данных, например, ALTER ANY TABLE.

q      CONTROL — аналогично разрешению FULL CONTROL в операционной системе. Тот, кому предоставлено такое разрешение, получает полные права как на сам объект, так и на информацию в нем.

q      DELETE — возможность удалять существующую информацию в таблицах. Применяется к таблицам, представлениям и столбцам.

q      EXECUTE — право запускать на выполнение. Применяется к хранимым процедурам и функциям.

q      INSERT — право на вставку новых данных в таблицы. Применяется к таблицам, представлениям и столбцам.

q      REFERENCES — разрешение, которое можно предоставить для проверки ограничений целостности. Например, пользователь может добавлять данные в таблицу с внешним ключом, а на таблицу с первичным ключом ему нельзя предоставлять права на просмотр. В этом случае на таблицу с первичным ключом ему можно предоставить право REFERENCES — и он сможет производить вставку данных в таблицу с внешним ключом, не получая лишних прав на главную таблицу. Это разрешение можно предоставлять на таблицы, представления, столбцы и функции.

q      SELECT — право на чтение информации. Предоставляется для таблиц, представлений, столбцов и некоторых типов функций (которые возвращают табличные наборы записей).

q      TAKE OWNERSHIP — право на принятие на себя владения данным объектом. Владелец автоматически обладает полными правами на свой объект. Такое право можно назначить для любых объектов.

q      UPDATE — возможность вносить изменения в существующие записи в таблице. Предоставляется на таблицы, представления и столбцы.

q      VIEW DEFINITION — право на просмотр определения для данного объекта. Предусмотрено для таблиц, представлений, процедур и функций.

Для каждого разрешения мы можем установить три значения:

q      GRANT — разрешение предоставлено явно;

q      WITH GRANT — разрешение не только предоставлено данному пользователю, но он также получил право предоставлять это разрешение другим пользователям. Можно предоставлять, конечно, только вместе с GRANT;

q      DENY — явный запрет на выполнение действия, определенного данным разрешением. Как в любых системах безопасности, явный запрет имеет приоритет перед явно предоставленными разрешениями.

Из кода Transact-SQL разрешения можно предоставлять командами GRANT, DENY и REVOKE. Например, чтобы предоставить пользователю User1 возможность просматривать данные в таблице Table1 в схеме dbo, можно воспользоваться командой:

GRANT SELECT ON dbo.Table1 TO User1;

Лишить его ранее предоставленного права можно при помощи команды:

REVOKE SELECT ON dbo.Table1 TO User1;

Отметим еще несколько моментов, связанных с предоставлением разрешений:

q      в большинстве реальных задач используются десятки и даже сотни таблиц и других объектов базы данных. Предоставлять каждому пользователю разрешения на каждый из этих объектов очень неудобно. Если есть возможность, постарайтесь использовать разрешения на уровне схемы или всей базы данных. Часто упростить предоставление разрешений могут и встроенные роли баз данных (db_datareader и db_datawriter);

q      существует общий принцип: не стоит обращаться из клиентского приложения к таблицам базы данных напрямую. Для изменения данных лучше использовать хранимые процедуры, а для запросов на чтение — хранимые процедуры или представления (при этом хранимые процедуры предпочтительнее). Причина проста: вы избежите внесения изменений в клиентское приложение, если потребовалось поменять структуру вашей базы данных (например, какая-то таблица поделилась на текущую и архивную или добавился новый столбец). Это следует помнить и при предоставлении разрешений. Отметим также, что при помощи хранимых процедур можно очень просто реализовать дополнительные проверки в добавление к обычным разрешениям;

q      SQL Server позволяет настраивать разрешения на уровне отдельных столбцов. На практике лучше не пользоваться такими разрешениями из-за падения производительности и усложнения системы разрешений. Если пользователю можно видеть не все столбцы в таблице (например, ему не нужны домашние телефоны сотрудников), то правильнее будет создать представление или хранимую процедуру, которые будут отфильтровывать ненужные столбцы;

q      в SQL Server 2005 появилась замечательная кнопка Effective Permissions (она расположена на вкладке Permissions). Эта кнопка позволяет посмотреть итоговые разрешения для пользователя или роли базы данных (поскольку разрешения от разных ролей базы данных, назначенных этому пользователю, суммируются).

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru