ГЛАВА 1
Технологии администрирования баз данных
1.7
Создание схемы базы данных
Тран­закция CREATE SCHEMA соз­да­ет схе­му в те­кущей БД. С по­мощью этой тран­закции так­же мож­но соз­да­вать таб­ли­цы и пред­став­ле­ния в но­вой схе­ме и пре­дос­тавлять раз­ре­шения GRANT, DENY или REVOKE на та­кие объек­ты.
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::=
{
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name
}
<schema_element> ::=
{
table_definition | view_definition | grant_statement |
revoke_statement | deny_statement
}
Здесь Schema_name — имя, по ко­торо­му схе­ма иден­ти­фици­ру­ет­ся в дан­ной БД.
AUTHORIZATION owner_name ука­зыва­ет имя учас­тни­ка уров­ня БД, ко­торый яв­ля­ет­ся вла­дельцем схе­мы. Это­му учас­тни­ку мо­гут при­над­ле­жать и дру­гие схе­мы, при этом те­кущая схе­ма мо­жет не ис­пользо­ваться по умол­ча­нию.
Table_definition ука­зыва­ет инс­трук­цию CREATE TABLE, ко­торая соз­да­ет таб­ли­цу внут­ри схе­мы. У учас­тни­ка, вы­пол­ня­юще­го эту инс­трук­цию, дол­жно быть раз­ре­шение CREATE TABLE в те­кущей БД.
View_definition ука­зыва­ет инс­трук­цию CREATE VIEW, ко­торая соз­да­ет пред­став­ле­ние внут­ри схе­мы. У учас­тни­ка, вы­пол­ня­юще­го эту инс­трук­цию, дол­жно быть раз­ре­шение CREATE VIEW в те­кущей БД.
Grant_statement ука­зыва­ет инс­трук­цию GRANT, ко­торая пре­дос­тавля­ет раз­ре­шения на лю­бой за­щища­емый объект, за ис­клю­чени­ем но­вой схе­мы.
Revoke_statement ука­зыва­ет инс­трук­цию REVOKE, ко­торая от­ме­ня­ет раз­ре­шения на лю­бой за­щища­емый объект, за ис­клю­чени­ем но­вой схе­мы.
Deny_statement ука­зыва­ет инс­трук­цию DENY, ко­торая зап­ре­ща­ет раз­ре­шения на лю­бой за­щища­емый объект, за ис­клю­чени­ем но­вой схе­мы.
Инс­трук­ция CREATE SCHEMA соз­да­ет схе­му, со­дер­жа­щи­еся в ней таб­ли­цы и пред­став­ле­ния, а так­же раз­ре­шения GRANT, REVOKE или DENY на лю­бой за­щища­емый объект в од­ной инс­трук­ции. Эта инс­трук­ция дол­жна вы­пол­няться как от­дельный па­кет. С по­мощью инс­трук­ции CREATE SCHEMA объек­ты соз­да­ют­ся внут­ри соз­да­ва­емой схе­мы.
Тран­закции CREATE SCHEMA яв­ля­ют­ся ато­мар­ны­ми. Ес­ли в про­цес­се вы­пол­не­ния инс­трук­ции CREATE SCHEMA воз­ни­ка­ют ошиб­ки, ни один из ука­зан­ных за­щища­емых объек­тов не соз­да­ет­ся и ни од­но раз­ре­шение не пре­дос­тавля­ет­ся.
За­щища­емые объек­ты, ко­торые не­об­хо­димо соз­дать с по­мощью инс­трук­ции CREATE SCHEMA, мо­гут быть пе­речис­ле­ны в лю­бом по­ряд­ке, за ис­клю­чени­ем пред­став­ле­ний, ссы­ла­ющих­ся на дру­гие пред­став­ле­ния. В этом слу­чае ссы­ла­юще­еся пред­став­ле­ние дол­жно быть соз­да­но пос­ле то­го пред­став­ле­ния, на ко­торое оно ссы­ла­ет­ся.
Та­ким об­ра­зом, с по­мощью инс­трук­ции GRANT мож­но пре­дос­тавлять раз­ре­шения на объект еще до то­го, как он бу­дет соз­дан, а инс­трук­ция CREATE VIEW мо­жет по­яв­ляться раньше инс­трук­ций CREATE TABLE, соз­да­ющих таб­ли­цы, на ко­торые ссы­ла­ет­ся пред­став­ле­ние. Кро­ме то­го, инс­трук­ции CREATE TABLE мо­гут дек­ла­риро­вать внеш­ние клю­чи к таб­ли­цам, оп­ре­делен­ным поз­же в инс­трук­ции CREATE SCHEMA.
В инс­трук­ци­ях CREATE SCHEMA под­держи­ва­ют­ся DENY и REVOKE. Пред­ло­жения DENY и REVOKE бу­дут ис­полняться в той пос­ле­дова­тельнос­ти, в ко­торой они по­яв­ля­ют­ся в инс­трук­ции CREATE SCHEMA.
Учас­тник, вы­пол­ня­ющий инс­трук­цию CREATE SCHEMA, мо­жет ука­зать дру­гого учас­тни­ка БД в ка­чес­тве вла­дельца соз­да­ва­емой схе­мы. Для это­го не­об­хо­димы до­пол­ни­тельные раз­ре­шения, опи­сан­ные да­лее.
Но­вая схе­ма при­над­ле­жит од­но­му из сле­ду­ющих учас­тни­ков уров­ня БД: пользо­вате­лю БД, ро­ли БД или ро­ли при­ложе­ния. Вла­дение объек­та­ми, со­дер­жа­щими­ся в схе­ме, мож­но пе­редать лю­бому учас­тни­ку уров­ня БД, од­на­ко у вла­дельца схе­мы всег­да ос­та­ет­ся раз­ре­шение CONTROL на объек­ты в схе­ме.
Для то­го что­бы соз­дать объект, ука­зан­ный в инс­трук­ции CREATE SCHEMA, у пользо­вате­ля дол­жно быть со­от­ветс­тву­ющее раз­ре­шение CREATE.
Что­бы наз­на­чить дру­гого пользо­вате­ля вла­дельцем соз­да­ва­емой схе­мы, у учас­тни­ка дол­жно быть раз­ре­шение IMPERSONATE на это­го пользо­вате­ля. Ес­ли роль БД ука­зана в ка­чес­тве вла­дельца, то вы­зыва­ющий объект дол­жен вхо­дить в роль или иметь на нее раз­ре­шение ALTER.
В сле­ду­ющем при­мере соз­да­ет­ся схе­ма Sprockets, при­над­ле­жащая Annik, ко­торая со­дер­жит таб­ли­цу NineProngs. Инс­трук­ция пре­дос­тавля­ет раз­ре­шение SELECT для John и зап­ре­ща­ет SELECT для Smith.
Схе­ма, таб­ли­ца и раз­ре­шения для раз­ных пользо­вате­лей соз­да­ют­ся в од­ной инс­трук­ции.
USE AdventureWorks2014;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Andrew;
CREATE TABLE NineProngs (source int, cost int, partnumber int)
GRANT SELECT ON SCHEMA::Sprockets TO John;
DENY SELECT ON SCHEMA::Sprockets TO Smith;
GO
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website