В SQL Server 2005 объект базы данных называется именем, состоящим из четырех компонентов следующей структуры:
<Server>.<Database >.<Schema>.< Object>
Схемы базы данных можно создавать при помощи инструкции CREATE SCHEMA.
Создавая схему, можно создать объекты базы данных и назначить разрешения в пределах одной транзакции, которая вызывается инструкцией CREATE SCHEMA.
Пример: создает схему с именем Accounting, назначает пользователя Peter владельцем схемы и создает таблицу с именем Invoices. Также предоставляется разрешение select роли базы данных public. Обратите внимание на двухкомпонентное имя, которое используется для обращения к таблице в текущей базе данных.
USE AdventureWorks;
GO
--Создаем схему Accounting с владельцем Peter.
CREATE SCHEMA Accounting
AUTHORIZATION Peter;
GO
--Создаем таблицу Invoices в схеме Accounting.
CREATE TABLE Accounting.Invoices (
InvoiceID int,
InvoiceDate smalldatetime,
ClientID int);
GO
--Предоставляем разрешение SELECT на новую таблицу роли public.
GRANT SELECT ON Accounting.Invoices
TO public; GO
--Добавляем строку данных в новую таблицу.
INSERT INTO Accounting.Invoices
VALUES (101,getdate(),102);
Информацию о схемах можно получить, выполнив запрос к представлению каталога sys.schemas:
|
|
SELECT * FROM sys.schemas;
Удалить схему можно при помощи инструкции DROP SCHEMA. В SQL Server 2005 не допускается удаление схемы, если в схеме есть объекты.
Пример показывает, как удалить существующую схему, выполнив запрос к объектам, которые содержатся в этой схеме, и удалить сначала эти объекты.
USE AdventureWorks;
GO
--Извлекаем информацию о схеме Accounting.
SELECT s.name AS ‘Schema’, o.name AS ‘Object’
FROM sys.schemas AS s INNER JOIN sys.objects AS o ON s.schema_id=o.schema_id WHERE s.name='Accounting';
GO
--Удаляем таблицу Invoices из схемы Accounting.
DROP TABLE Accounting.Invoices;
GO
--Удаляем схему Accounting.
DROP SCHEMA Accounting;
Использование схемы по умолчанию. Когда приложение ссылается на объект базы данных, не уточняя схемы, SQL Server осуществляет попытку найти объект в схеме, заданной для текущего пользователя по умолчанию. Если объект не содержится в схеме по умолчанию, SQL Server пытается обнаружить объект в схеме dbo.
Пример демонстрирует, как создать схему и назначить ее в качестве схемы по умолчанию для пользователя.
--Создаем имя входа SQL Server в данном экземпляре SQL Server.
CREATE LOGIN Viktor
WITH PASSWORD='22061946'; GO
--Изменяем контекст соединения на базу данных AdventureWorks.
USE AdventureWorks;
GO
--Создаем пользователя Viktor в базе данных AdventureWorks и сопоставляем этого пользователя имени входа Viktor
CREATE USER Viktor
FOR LOGIN Viktor;
GO
--Создаем схему Marketing5
CREATE SCHEMA Marketing5
GO
--Создаем таблицу Campaigns в только что созданной схеме.
CREATE TABLE Marketing.Campaigns (
CampaignID int, CampaignDate smalldatetime, Description varchar (max)); GO
--Предоставляем разрешение SELECT пользователю Viktor на новую таблицу.
GRANT SELECT ON Marketing.Campaigns TO Viktor;
GO
--Объявляем схему Marketing схемой по умолчанию для пользователя Viktor
|
|
ALTER USER Viktor
WITH DEFAULT_SCHEMA=Marketing;
Если войти под именем Viktor в SQL Server и пытаться добавить запись, то выдается ошибка (пользователю Viktor предоставлено разрешение SELECT на таблицу Marketing.Campaigns).
Задания для самостоятельного выполнения:
1. В Интерфейсе SQL Server Management Studio создать имя входа (имя и пароль).
2. В Transact-SQL создать имя входа (имя и пароль). Получить информацию об именах входа SQL Server из представления каталога sys.sql_logins.
3. В Интерфейсе SQL Server Management Studio назначить одной из созданных учетных записей (имя входа) фиксированную серверную роль (dbcreator).
4. В Transact-SQL назначить одной из созданных учетных записей (имя входа) фиксированную серверную роль. Проверить, принадлежит ли имя входа заданной серверной роли (запрос системной функции IS_SRVROLEMEMBER).
5. В Transact-SQL последовательно отключить и включить одну из созданных учетных записей. Проверить, отключение и включение имени входа (запрос к представлению каталога sys.sql_logins).
6. Предоставить разрешение на вашу базу данных одной из созданных учетных записей в SQL Server Management Studio. Задать принадлежность к фиксированной роли базы данных.
7. Предоставить разрешение на вашу базу данных одной из созданных учетных записей в Transact-SQL. Проверить, имеет ли имя входа доступ к базе данных. Задать в Transact-SQL принадлежность к фиксированной роли базы данных.
8. В Интерфейсе SQL Server Management Studio для одного из имен входа задать гранулярные разрешения на столбцы одной из таблиц вашей базы данных. Проверить работу заданных разрешений.
9. В Transact-SQL последовательно предоставить и отменить для одного из имен входа гранулярные разрешения (использовать GRANT, DENY и REVOKE). Проверить работу заданных разрешений.
10. В Интерфейсе SQL Server Management Studio удалить одно из имен входа.
11. В Transact-SQL удалить одно из имен входа.
Создать отчет в Word, содержащий по каждому заданию операторы Transact-SQL описанием параметров запроса или последовательность действий SQL Server Management Studio, а также результаты проверки выполнения заданий.
[1] BULK INSERT - выполняет импорт файла данных в таблицу или представление базы данных в формате, указанном пользователем.