架构(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 [domain\login_xxx]
from windows
with default_database=[HR_DataWarehouse]; --Create User
create user [domain\login_xxx]
from login [domain\login_xxx]
with default_schema=dbo; --Create role
create role DBReaderExecute_NoModify
AUTHORIZATION [domain\login_xxx]; --Add member to role
alter role DBReaderExecute_NoModify
add member [domain\login_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)

Security3: Schema 和 Permission的更多相关文章

  1. ABP框架系列之二十九:(Hangfire-Integration-延迟集成)

    Introduction Hangfire is a compherensive background job manager. You can integrate ASP.NET Boilerpla ...

  2. 1.ZooKeeper ACL权限控制

    参考:https://blog.csdn.net/liuxiao723846/article/details/79391650 ZK 类似文件系统,Client 可以在上面创建节点.更新节点.删除节点 ...

  3. 从 Paxos 到 ZooKeeper

    分布式一致性 分布式文件系统.缓存系统和数据库等大型分布式存储系统中,分布式一致性都是一个重要的问题. 什么是分布式一致性?分布式一致性分为哪些类型?分布式系统达到一致性后将会是一个什么样的状态? 如 ...

  4. profile name is not valid,The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

    使用不是sysadmin权限的账号执行存储发邮件,报异常profile name is not valid, EXEC msdb.dbo.sp_send_dbmail @profile_name = ...

  5. Spring Security3学习实例

    Spring Security是什么? Spring Security,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理 ...

  6. Spring security3

    最近一直在学习spring security3,试着搭建了环境: 构建maven环境 项目配置pom.xml文件 <project xmlns="http://maven.apache ...

  7. spring security3.2配置---权限管理

    之前已经在我的博客中发过security的执行流程图了,大家能够先去看看那个图再看这篇.今天我主要在这里贴出了security配置中的几个重要的类和两个xml配置文件,基本上控制权限的就是这几个文件了 ...

  8. 【翻译自mos文章】改变数据库用户sysman(该用户是DB Control Repository 的schema)password的方法

    改变数据库用户sysman(该用户是DB Control Repository 的schema)password的方法 參考原文: How To Change the Password of the ...

  9. Spring Security3实现,权限动态获取

    Spring Security3实现,权限动态获取 原文  http://blog.csdn.net/yangwei19680827/article/details/9359113 主题 网络安全Sp ...

随机推荐

  1. Jekyll 安装权限问题 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/jekyll

    OS X El Capitan 新特性(System Integrity Protection or SIP)中加强了权限,但是可以对这里进行操作 /usr/local/bin 可以尝试使用以下指令进 ...

  2. struts2 框架处理流程

    struts2 框架处理流程 流程图如下: 注意:StrutsPrepareAndExecuteFilter替代了2.1.3以前的FilterDispatcher过滤器,使得在执行Action之前可以 ...

  3. Smack4.1注册新用户

    更新了smack4.1后,发现之前的注册表单不能使用了,很多属性都不能使用. 发现4.1把帐号的出来都集中到 org.jivesoftware.smackx.iqregister.AccountMan ...

  4. webstorm2016注册码

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  5. Python之路【第三篇】python基础 之基本数据类型 补充

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-310 ...

  6. [LintCode] Merge Two Sorted Lists 混合插入有序链表

    Merge two sorted (ascending) linked lists and return it as a new sorted list. The new sorted list sh ...

  7. 【转】博弈—SG函数

    转自:http://chensmiles.blog.163.com/blog/static/12146399120104644141326/ http://blog.csdn.net/xiaofeng ...

  8. C# Just want 入门

    1. 终于明白为什么以前的程序在结尾部分会经常出现 input any key to exit! using System; namespace ConsoleApplication1 { class ...

  9. viso

  10. 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt

    package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...