• Security3: 架构和权限


    架构(Schema)是数据库对象(比如,Table,View,存储过程等)的容器,授予用户对Schema访问的权限,就是授予用户对Schema下所有object的访问权限。

    一,架构(Schema)是数据库对象的容器

    1,创建架构,指定数据库主体(database-level principal)为该架构的Owner

    CREATE SCHEMA schema_name
    AUTHORIZATION owner_name

    2,改变数据库对象的架构名

    执行alter schema命令只能在同一个数据库中转移数据库对象的schema,跟该表相关的权限配置都将被移除。

    alter schema hr 
    transfer object::dbo.usres

    二,授予用户访问Schema的权限

    1,将Schema作为安全对象(Securable),授予用户访问Schema的权限

    一旦用户能够访问Schema,就能访问架构(Schema)容纳的所有数据库对象。

    GRANT permission  [ ,...n ] ON SCHEMA :: schema_name
    TO database_principal [ ,...n ]
    [ WITH GRANT OPTION ]

    2,示例,授予用户或角色访问Schema的权限

    GRANT INSERT 
    ON SCHEMA :: HumanResources 
    TO guest;
    
    GRANT SELECT 
    ON SCHEMA :: Person 
    TO WilJo 
    WITH GRANT OPTION;

    三,schema的所有者

    通过系统视图:sys.schemas 查看schema的所有者,在删除用户时,如果该用户是schema的所有者,那么在删除时,系统抛出错误:

    Error: 15138 The database principal owns a schema in the database, and cannot be dropped.

    通过命令,修改schema的所有者,把schema的所有者转移到dbo用户:

    ALTER AUTHORIZATION 
    ON SCHEMA::SchemaName 
    TO dbo

    四,特殊的shecma

    在每个数据库中,都存在三个特殊的schema:dbo,sys 和 INFORMATION_SCHEMA:

    • dbo是数据库对象默认的schema,其owner是用户dbo;
    • guest:是schema,其owner是用户guest;
    • sys 和 INFORMATION_SCHEMA 是数据库引擎内部使用的schema,用户不能删除和修改,其Owner默认是用户sys和INFORMATION_SCHEMA;

    五,真实经历

    项目经理(PM)要求给某一个User 授予一个只读的权限,避免其对数据进行修改,影响数据库的数据,但是仅仅授予只读的权限不行,因为这个User还要执行一些查询,查询语句中包括临时表,表变量,变量,自定义数据类型等,所以,必须授予其Select 和 Execute的权限。

    --Create Login
    create login [domainlogin_xxx]
    from windows
    with default_database=[HR_DataWarehouse];
    
    --Create User
    create user [domainlogin_xxx]
    from login [domainlogin_xxx]
    with default_schema=dbo;
    
    --Create role
    create role DBReaderExecute_NoModify
    AUTHORIZATION [domainlogin_xxx];
    
    --Add member to role
    alter role DBReaderExecute_NoModify
    add member [domainlogin_xxx];
    
    --Grant Permission
    grant EXECUTE,SELECT     
    on schema::dbo       
    to DBReaderExecute_NoModify; 
    
    grant EXECUTE,SELECT     
    on schema::hr       
    to DBReaderExecute_NoModify; 

    参考文档:

    CREATE SCHEMA (Transact-SQL)

    ALTER SCHEMA (Transact-SQL)

    GRANT Schema Permissions (Transact-SQL)

  • 相关阅读:
    生成R文件
    android开发问题汇总
    雅虎股票接口
    Ext4.1 , #Ext4.2
    MSSQL手工注入 报错注入方法
    MSSQL 数据库复制脚本
    Go VS Code 调式常见问题处理
    Win10 VS2012 无法注册IIS4.0 解决方案
    VirtualBox 局域网独立主机设置
    如何用.reg文件操作注册表
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5125250.html
走看看 - 开发者的网上家园