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

    xiaoxiao2023-12-23  27

    本节书摘来自异步社区出版社《锋利的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所示。

    下面的语句把对架构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 ;

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

    相关资源:锋利的SQL(第2版)图书代码
    最新回复(0)