SQL SERVER 架构管理

来源:互联网 发布:nba新秀数据 编辑:程序博客网 时间:2024/05/05 09:00

架构特点:

架构是数据库级的安全对象,是数据库中表、视图、存储过程等对象的容器,是形成单个命名空间的数据库实体的集合,一个架构只能有一个拥有者。

将所有权与架构分离的意义:

①架构所有权和架构范围内的安全对象可以转移,对象可以在架构之间转移

②一个用户可以拥有多个架构,多个数据库用户可以使用同一个默认架构

③使用架构,使得对架构和架构中对象的权限管理更加精细,用户在对架构对象进行操作时,不仅需要获得对对象操作的权限,还要获得对架构的操作权限

④架构可以由任何数据库主体拥有,如角色和应用程序角色等。可以删除数据库用户而不删除相应架构中的对象,删除用户并不会造成对架构和架构中对象的影响

架构管理

一、CREATE SCHEMA--------------------------------创建架构

CREATE SCHEMA <架构名子句> [<架构元素>[,.........n]]

<架构名子句>::={架构名|AUTHORIZATION  所有者名 |架构名 AUTHORIZATION 所有者名}

<架构元素>::={表定义语句|视图定义语句|授权语句|撤销授权语句|禁止授权语句}

注意:

①AUTHORIZATION指定数据库级别的主体(数据库用户,数据库角色,应用程序角色)作为架构拥有者,在架构内创建的对象由架构所有者拥有。架构所包含对象的所有权可转让给任何数据库级别的主体,但架构所有者始终保留对此架构内对象的CONTROL权限,若CREATE SCHEMA中未指定所有者,则由当前用户作为所有者。

②当前支持不指定架构名称的 CREATE SCHEMA 语句,目的是为了向后兼容。此类语句并不在数据库中实际创建架构,但它们会创建表和视图,并授予权限。主体不需要 CREATE SCHEMA 权限来执行这一早期形式的 CREATE SCHEMA,因为不会创建任何架构。在 SQL Server 的未来版本中将删除此功能。

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

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

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

④CREATE SCHEMA 可以在单条语句中创建架构以及该架构所包含的表和视图,并授予对任何安全对象的 GRANT、REVOKE 或 DENY 权限。此语句必须作为一个单独的批处理执行。CREATE SCHEMA 语句所创建的对象将在要创建的架构内进行创建。

⑤GRANT 语句可以在创建某个对象自身之前对该对象授予权限,CREATE VIEW 语句也可以出现在创建该视图所引用表的 CREATE TABLE 语句之前。同样,CREATE TABLE 语句可以在 CREATE SCHEMA 语句定义表之前声明表的外键。

⑥支持在 CREATE SCHEMA 语句中使用 DENY 和 REVOKE。DENY 和 REVOKE 子句将按照它们在 CREATE SCHEMA 语句中出现的顺序执行。

⑦若要指定其他用户作为所创建架构的所有者,则调用方必须具有对该用户的 IMPERSONATE 权限。如果指定一个数据库角色作为所有者,则调用方必须拥有该角色的成员身份或对该角色拥有 ALTER 权限。

例如:

下面的示例将创建由 Annik 拥有的、包含表NineProngsSprockets 架构。该语句向Mandar 授予 SELECT 权限,而对 Prasanna 拒绝授予 SELECT 权限。请注意,SprocketsNineProngs 在一个语句中创建。

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

 

二、ALTER SCHEMA---------------------修改架构

ALTER SCHEMA 目标架构名 TRANSFER 原架构名.对象名

说明:修改架构即将架构中的对象转移到其他架构中,修改架构不会改变架构中的对象,但与该对象相关联的所有权限都被删除

如:ALTER SCHEMA S_YX TRANSFER DBO.T1

 

三、DROP SCHEMA------------------------删除架构

DROP SCHEMA 架构名

注意:只有当架构中不在包含对象时,才可以删除该架构。

四、ALTER AUTHORIZATION------------修改架构所有者

ALTER AUTHORIZATON ON [<实体类型>::] 实体名 TO {schema owner|主体名}

对象类型::={SCHEMA|ROLE|DATABASE...........}

ALTER AUTHORIZATION 不进可以修改架构所有者,也可以修改其他类型所有者

如:ALTER AUTHORIZATION ON SCHEMA::S_TY  TO DBO