《锋利的SQL(第2版)》——2.5 架构管理

本节书摘来自异步社区出版社《锋利的SQL(第2版)》一书中的第2章,第2.5节,作者:张洪举 王晓文,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 架构管理

锋利的SQL(第2版)
前面提过,架构是数据库中对象的容器,对于被集体管理的对象子集,通过架构可以简化操作。用户拥有架构和默认架构DBO,默认架构用于解析未使用其完全限定名称引用的对象的名称。这里的意思是,在访问默认架构中的对象时,不需要指定架构的名称。而对于非默认架构,则需要使用下面的格式进行访问,不过,微软建议你一直使用下面的两部分式对象名称。

架构名称.对象名称

2.5.1 创建架构

可以使用CREATE SCHEMA语句创建架构,语法格式如下所示。其中的schema_element部分允许使用CREATE TABLE、CREATE VIEW、GRANT、REVOKE和DENY语句来定义此架构包含的表和视图,并可对单个语句中的任何安全对象授予、撤销或拒绝授予权限。

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

在数据库内标识架构的名称,最大长度是128个字符。

AUTHORIZATION owner_name

指定将拥有架构的数据库级主体的名称。此主体还可以拥有其他架构,并且可以不使用当前架构作为其默认架构。

table_definition

指定在架构内创建表的CREATE TABLE语句。

view_definition

指定在架构内创建视图的CREATE VIEW语句。

grant_statement

指定可对除新架构外的任何安全对象授予权限的GRANT语句。

revoke_statement

指定可对除新架构外的任何安全对象撤销权限的REVOKE语句。

deny_statement

指定可对除新架构外的任何安全对象拒绝授予权限的DENY语句。

例如,下面的语句将建立一个名为Employees的架构,所有者为dbo。

CREATE SCHEMA Employees AUTHORIZATION dbo

又如,下面的语句创建由Annik拥有的、包含表NineProngs的Sprockets架构。此语句向Mandar授予SELECT权限,而对Prasanna拒绝授予SELECT权限。

USE AdventureWorks2014;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
  CREATE TABLE NineProngs (source int, cost int, partnumber int)
  GRANT SELECT TO Mandar
  DENY SELECT TO Prasanna;
GO

2.5.2 修改架构

在创建一个架构后,可以根据需要使用GRANT、REVOKE、DENY语句对数据库用户进行授予、撤销授予、拒绝权限设置。虽然我们这本书是讲解SQL的,但是对于此操作,使用SQL Server Management Studio会更方便一些,步骤如下。

在对象资源管理器中,展开数据库引擎实例。
展开“数据库”节点,从中选择一个数据库并展开。
展开数据库的“安全性”节点后,继续展开“架构”节点,右键单击要修改的架构并选择“属性”,打开架构的属性窗口。
在架构的属性窗口的“常规”页面中,可以指定架构的名称和所有者。要查找一个有效的数据库级主体,可以单击“搜索”按钮。
可以在架构的属性窗口的“权限”页面中设置架构的权限,步骤如下。

在“权限”页面中单击“添加”按钮打开“选择用户或角色”对话框。
在“选择用户或角色”对话框的编辑框中输入要选择的用户或角色名称,并使用分号将名称分割开。如图2-3所示。
在添加完用户或角色后,可以为其指定详细的权限设置,如图2-4所示。
《锋利的SQL(第2版)》——2.5 架构管理

《锋利的SQL(第2版)》——2.5 架构管理

下面的语句把对架构HumanResources的INSERT权限授予Guest用户。

GRANT INSERT ON SCHEMA :: HumanResources TO guest;

下面的语句则是撤销Guest用户的INSERT权限。

REVOKE INSERT ON SCHEMA :: HumanResources TO guest;

2.5.3 移动对象到一个新架构中

在某些时候,可能需要移动对象到另一个容器中。但是,只能将对象在同一数据库之内的架构之间移动,在移动时,将会改变与对象相关联的命名空间。因此,也将改变对象的查询和访问方法。

将对象移入新架构时,将删除与该对象关联的全部权限。如果已显式设置对象所有者,则该所有者保持不变。移动对象应当使用ALTER SCHEMA语句,语法格式如下:

ALTER SCHEMA schema_name TRANSFER object_name;

schema_name

当前数据库中的架构名称,对象将移入其中。

object_name

要移入架构的对象名称。

下面的语句将表Address从架构Person移动到HumanResources架构中。

ALTER SCHEMA HumanResources TRANSFER Person.Address ;

2.5.4 删除架构

可以使用DROP SCHEMA语句删除架构。要删除的架构不能包含任何对象。例如,下面的语句将删除Employees架构:

DROP SCHEMA Employees ;

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

上一篇:红黑树


下一篇:yum源失效,yum命令报错404