ref-14882 (SQL Server 2000), страница 12
Описание файла
Документ из архива "SQL Server 2000", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "ref-14882"
Текст 12 страницы из документа "ref-14882"
О INSERT. Это право позволяет вставлять в таблицу или представление новые строки. Как следствие, право INSERT может быть выдано только на уровне таблицы или представления и не может быть выдано на уровне столбца.
О UPDATE. Это право выдается либо на уровне таблицы, что позволяет изменять все данные в таблице, либо на уровне отдельного столбца, что разрешает изменять данные только в пределах конкретного столбца.
О DELETE. Это право позволяет удалять строки из таблицы или представления. Как и право INSERT, право DELETE может быть выдано только на уровне таблицы или представления и не может быть выдано на уровне столбца.
О SELECT. Разрешает выборку данных. Может выдаваться как на уровне таблицы, так и на уровне отдельного столбца.
О REFERENCES. Возможность ссылаться на указанный объект. Применительно к таблицам разрешает пользователю создавать внешние ключи, ссылающиеся на первичный ключ или уникальный столбец этой таблицы. Применительно к представлениям право REFERENCES позволяет связывать представление со схемами таблиц, на основе которых строится представление. Это позволяет отслеживать изменения структуры исходных таблиц, которые могут повлиять на работу представления. Право REFERENCES не существовало в предыдущих версиях SQL Server.
Как следует из вышеизложенного, доступ можно предоставлять как на уровне всей таблицы или представления, так и на уровне отдельного столбца. Обычно не практикуется управление правами доступа на уровне конкретного столбца. Если в таблице имеется один или более столбцов, доступ пользователей к которым необходимо ограничить, то в базе данных часто создается представление (view), включающее только те столбцы исходной таблицы, доступ к которым разрешен.
Предоставить или отклонить доступ пользователю базы данных ко всем объектам базы данных можно при помощи встроенных ролей базы данных. Например, для разрешения чтения данных из всех таблиц и представлений базы данных достаточно включить пользователя в фиксированную роль db_datareader, а не изменять права доступа пользователя к каждой таблице и представлению в отдельности.
Используйте команду GRANT для управления разрешениями пользователя на доступ к объектам базы данных:
GRANT
(ALL [PRIVILEGES] | permiss1on[....n]}
{
[(column[,...n])] ON {table | view}
| ON {table | view}[(column[,...n])]
| ON {stored_procedure | extended_procedure}
}
TO security_account[,...n] [WITH GRANT OPTION] [AS {group | role}]
Назначение параметров команды GRANT следующее:
О ALL — пользователю предоставляются все доступные разрешения. Этот параметр могут использовать только участники роли sysadmln;
О permission — список доступных разрешений, которые предоставляются пользователю (SELECT, INSERT, UPDATE, DELETE, EXECUTE). Вы можете одновременно предоставлять несколько разрешений, в этом случае их нужно разделять запятыми;
О security_account — имя того объекта системы безопасности, который необходимо включить в роль. В качестве таких объектов могут выступать как учетные записи SQL Server, так и пользователи и группы пользователей Windows NT, которым предоставлен доступ к серверу баз данных;
О table, view, column, stored_procedure, extended_procedure — в качестве данных параметров выступают имена объектов в текущей базе данных, для которых необходимо предоставить доступ;
О WITH GRANT OPTION— использование данного параметра позволяет пользователю, которому вы предоставляете права, назначать права на доступ к объекту другим пользователям;
О AS {group | role) — этот необязательный параметр позволяет указать участие пользователя в роли, которая имеет возможность предоставлять права другим пользователям.
В качестве примера команды рассмотрим следующую ситуацию. Вам необходимо предоставить права на использование команд INSERT и SELECT группе Engineer в таблице Materials. При этом нужно, чтобы в дальнейшем пользователи этой группы могли сами предоставлять аналогичные права. Для этого следует выполнить следующую команду:
GRANT SELECT. INSERT
ON Materials
TO Engineer
WITH GRANT OPTION
Впоследствии пользователь Valentin, являющийся членом группы Engineer, может предоставить аналогичные права другому пользователю L i s s:
GRANT SELECT, INSERT ON Materials ' TO Liss AS Engineer
В данном случае необходимо подтвердить, на каком основании Valentine предоставляет права, поэтому применяется параметр AS.
Будьте осторожны при использовании параметра WITH GRANT OPTION, поскольку при этом вы теряете контроль над предоставлением прав на доступ другим пользователям. Лучше всего ограничить круг людей, обладающих возможностью управлять назначением прав.
Единственное право доступа, которое может быть предоставлено для хранимой процедуры, — это право на ее выполнение (EXECUTE). Естественно, кроме этого владелец хранимой процедуры может просматривать и изменять ее код.
Для функции можно выдать право на ее выполнение, а, кроме того, можно выдать право REFERENCES, что обеспечит возможность связывания функции с объектами, на которые ссылается функция. Такое связывание позволяет запретить внесение изменений в структуру объектов, которые могли бы привести к нарушению работы функции.
Чтобы предоставить право на выполнение хранимой процедуры, можно использовать Enterprise Manager. Для этого выберите в левой панели Enterprise Manager нужную базу данных и откройте в ней папку Stored Procedures. В правой части Enterprise Manager будет отображен список хранимых процедур, уже созданных в базе данных. Управление правами доступа можно осуществлять в окне Object Properties (свойства объектов), показанном на рис. 12.20. Вызвать это окно можно либо с помощью кнопки Permissions (права) в окне свойств хранимой процедуры, либо выбрав в контекстном меню хранимой процедуры пункт АН Tasks > Manage Permissions (все задачи > управление правами).
Чтобы разрешить пользователю выполнять хранимую процедуру, нужно установить напротив его имени галочку в поле ЕХЕС. Чтобы запретить доступ, нужно поставить крестик. Отсутствие какого-либо значка подразумевает неявное отклонение доступа. Более подробно о правах доступа будет рассказано далее в этой главе.
Управление правами доступа к функциям осуществляется аналогично.
Другой способ управления правами доступа заключается в предоставлении прав конкретному пользователю с помощью окна прав доступа пользователя. Для этого в окне Enterprise Manager выберите необходимую базу данных, а затем папку Users. Щелкните левой кнопкой мыши на выбранном пользователе. В появившемся окне щелкните на кнопке Permissions (права) и укажите необходимые права.
Запрещение доступа
Система безопасности SQL Server имеет иерархическую структуру. Это позволяет ролям базы данных включать в себя учетные записи и группы Windows NT, пользователей и роли SQL Server. Пользователь же, в свою очередь, может участвовать в нескольких ролях. Следствием иерархической структуры системы безопасности является то, что пользователь может одновременно иметь разные права доступа для разных ролей. Если одна из ролей, в которых состоит пользователь, имеет разрешение на доступ к данным, то пользователь автоматически имеет аналогичные права. Тем не менее может потребоваться запретить возможность доступа к данным. Когда вы запрещаете пользователю доступ к данным или командам Transact-SQL (deny access), тем самым аннулируются все разрешения на доступ, полученные пользователем на любом уровне иерархии. При этом гарантируется, что доступ останется запрещенным независимо от разрешений, предоставленных на более высоком уровне.
Пусть, например, вы создаете в базе данных таблицу, доступ к которой по умолчанию предоставлен всем пользователям, но вам необходимо временно ограничить доступ определенных пользователей к этой таблице. Вместо того чтобы отозвать разрешения на доступ, можно создать роль, которой будет запрещен доступ к этой таблице, и включить пользователей в эту роль. Проще контролировать несколько записей в роли, которая запрещает доступ, чем манипулировать множеством разрозненных учетных записей, пытаясь вспомнить, вернули ли вы права доступа пользователю обратно. При большом количестве пользователей такой подход позволяет упростить администрирование системы безопасности.
Используйте команду DENY для запрещения пользователю доступа к объектам базы данных:
DENY
(ALL [PRIVILEGES] | permission[,...n]}
{
[(columnC....n])] ON {table | view} | ON {table | vi ew} [-(columnC, . . . n])] I ON {stored_procedure | extended_procedure}
TO security_account[....n] [CASCADE]
Для запрещения выполнения команд Transact-SQL применяется другая команда:
DENY {ALL | statement^... .n]} ТО security_account[....n]
Параметры данной команды аналогичны параметрам команды GRANT. Параметр CASCADE позволяет отзывать права не только у данного пользователя, но также и у всех тех пользователей, кому он предоставил данные права. Поясним смысл вышесказанного на примере. Пусть вы предоставили пользователю Sheridan определенные права:
GRANT CREATE TABLE
ТО Sheridan
WITH GRANT OPTION
Допустим, Sheridan предоставляет аналогичные права некоторым пользователям. Если впоследствии вам потребуется отозвать разрешения у Sheridan, вы выполните команду:
DENY CREATE TABLE ТО Sheridan CASCADE
При этом будут отозваны и все разрешения, которые Sheridan предоставил другим пользователям.
Создание и обслуживание баз данных
Любая база данных SQL Server 2000 состоит из набора таблиц, содержащих данные, и дополнительных объектов, создаваемых для обработки данных. К таким объектам относятся, например, представления, триггеры и хранимые процедуры. Данные сохраняются в таблицах в соответствии с их логическим определением, например, данные об имеющихся на складе товарах хранятся в одной таблице, а список персонала — в другой.
SQL Server позволяет одновременно поддерживать множество баз данных, которые могут иметь связи с другими базами данных либо существовать независимо.
Прежде чем приступить к созданию базы данных, необходимо четко представлять все составляющие ее части и уметь грамотно использовать их. Соблюдение этого требования гарантирует, что ваша база данных будет иметь оптимальную структуру.
Настоятельно рекомендую не создавать в системной базе данных master никаких пользовательских объектов, хотя это и возможно. База данных master содержит системные таблицы, которые хранят данные о параметрах функционирования SQL Server. Поэтому повреждение данных в этой базе может привести к непредсказуемым последствиям.
SQL Server 2000 предлагает несколько путей создания баз данных. О Использование Enterprise Manager. Для создания базы данных с помощью
Enterprise Manager в контекстном меню папки Databases на нужном сервере.
выберите пункт New Database (новая база данных). ;
О Использование мастера Create Database Wizard. На панели инструментов Enterprise Manager щелкните на кнопке Run a Wizard (запустить мастера) и выберите нужного мастера.
О Использование Transact-SQL. Этот метод предполагает выполнение команды
CREATE DATABASE.
Кроме перечисленных методов имеется еще несколько способов создания баз данных, например средствами SQL-DMO. Работа с этими механизмами является темой отдельной книги и здесь рассматриваться не будет.
Один сервер может поддерживать, максимум, 32 767 баз данных.
Для создания базы данных необходимо указать ее название, владельца (им будет пользователь, создающий базу данных), размер, определить файлы и группы файлов, из которых будет состоять создаваемая база данных.
Перед созданием базы данных необходимо уяснить следующие моменты:
О по умолчанию базы данных разрешено создавать членам фиксированных ролей сервера sysadmin и dbcreator, хотя разрешение на создание баз данных можно предоставлять и другим пользователям;
О пользователь, создающий базу данных, автоматически становится ее владельцем;
О имя (название) базы данных должно соответствовать правилам именования объектов. Для хранения базы данных используется три типа файлов.
О Primary — первичный файл. Каждая база данных обязательно имеет такой файл, причем только один. В этом файле хранится системная информация о базе данных и ее объектах. Здесь же размещаются системные таблицы. Кроме того, в первичном файле могут храниться и пользовательские данные. По умолчанию этот файл имеет расширение .mdf.
О Secondary — вторичный файл. Здесь содержатся пользовательские данные, не поместившиеся в первичном файле. Если база данных небольшая и нет надобности создавать вторичные файлы, то всю информацию можно хранить в первичном файле. Однако если база данных имеет большие размеры, можно иметь несколько вторичных файлов, причем для удобства работы с данными эти файлы можно хранить на разных дисках. По умолчанию вторичные файлы имеют расширение .ndf.