Security2:角色和权限
权限的授予分为三部分:权限(Permission),安全对象(Securable)和安全主体(Principal),这三个术语之间的关系是:Grant Permission on Securable to Principal,通俗地解释是:授予Principal操作Securable的Permission。Principal是被授予权限的实体,Securable是table,view等对象,是Principal操作的对象;有时Principal也会作为Securable,被其他Principal操纵。
一,Role 作为 Principal,被授予权限
查看Permission列表,点击:Permissions (Database Engine),这里列出的是单个权限(Individual permission),role 是权限的集合。
1, 创建角色
Role分为数据库角色和服务器角色,AUTHORIZATION owner_name 子句用于指定角色Owner
CREATE ROLE role_name
AUTHORIZATION owner_name CREATE SERVER ROLE role_name
AUTHORIZATION server_principal
角色的所有者,在删除所有者之前,必须修改角色的所有者关系,经常把角色的所有者设置为dbo:
ALTER AUTHORIZATION
ON ROLE::[role_name] TO [dbo]
如果数据库用户拥有一个role,在删除用户时,数据库将抛出错误:
The database principal owns a database role and cannot be dropped.
2,将权限授予角色,角色是权限的集合
Role作为一个Principal,可以使用Grant子句为role授予权限,这里为role授予Object的Permissions
GRANT <permission> [ ,...n ]
ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ] <database_principal> ::= Database_user | Database_role
3,为角色增加或删除一个用户成员
ALTER [Server] ROLE role_name
{
[ ADD MEMBER database_principal ]
| [ DROP MEMBER database_principal ]
}
4,示例,授予数据库角色访问table的权限
grant ALTER,DELETE,INSERT,SELECT,UPDATE --Permission List
on dbo.dt_test --Table Name
to dabase_level_role --Role Name
with GRANT OPTION
二,Role 作为Securable,Principal授予操纵Role的权限
Role 可以是数据库的安全主体(Principal),被授予权限;Role可以是数据库的安全对象(Securable),Grant子句可以授予Principal操纵Role的权限。
GRANT permission [ ,...n ]
ON
{ [ USER :: database_user ]
| [ ROLE :: database_role ]
}
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ] <database_principal> ::= Database_user | Database_role
1,Granting CONTROL permission on a user to another user
GRANT CONTROL
ON USER::Wanida
TO RolandX;
2,Granting VIEW DEFINITION permission on a role to a user with GRANT OPTION
GRANT VIEW DEFINITION
ON ROLE::SammamishParking
TO JinghaoLiu
WITH GRANT OPTION;
三,数据库对象权限
对数据库对象的权限控制,粒度是表列,数据行是对象的所有数据行。
GRANT <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ]
[ AS <database_principal> ] <database_principal> ::= Database_user | Database_role
对象的权限列表:
- Scalar function permissions: EXECUTE, REFERENCES.
- Table-valued function permissions: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
- Stored procedure permissions: EXECUTE.
- Table permissions: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
- View permissions: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
1,Granting SELECT permission on a table
GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;
2,Granting EXECUTE permission on a stored procedure
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
TO Recruiting11;
四,使用固定数据库角色授权,授予某个User只读数据的权限
Step1,在SQL Server中为该用户创建一个Login和User,在创建User时,建立Login 和 User 之间的Mapping 关系。
由于权限是授予user的,所以必须使用Use 子句切换到当前db中
--create Login Name
create login [domain\login]
from windows; use current_db_name
go
--create --UserName
Create User DWReadOnly
for login [domain\login]
Step2,使用DB的Fixed Role
db_datareader :Members of the db_datareader fixed database role can read all data from all user tables.
只需要将User 添加到DB的 db_datareader 中,那么这个User 就能 只能 read 所有的User table,而不会修改任何数据。
step3,使用Alter Role 授予user 只读权限
--Grant readonly
ALTER ROLE [db_datareader]
add MEMBER DWReadOnly
如果要授予Server Role(服务器角色)权限,授予权限的Principal 是Login。
create login [domain\username]
from windows; alter server role sysadmin
add member [domain\username];
五,固定角色
固定角色分为服务器级别和数据库级别,角色的权限是预先定义好的,除了public角色之外,不能修改角色的权限。
1,数据库级别的固定角色
在数据库级别最高的权限是db_owner角色,拥有数据库的最高权限:control database
- db_owner:允许在数据库中执行任何操作,包括删除数据库
- db_ddladmin:允许执行DDL命令
- db_datawriter:允许对所有表进行增删改查操作
- db_datareader:允许对所有表进行查找操作
- db_denydatawriter:不允许对表执行insert、update和delete命令
- db_denydatareader:不允许对表执行select命令
- public:数据库级别的public角色,权限可以被修改,所有的用户都会继承public角色的权限
2,服务器级别的固定角色
在服务器级别,最高的权限是sysadmin,能够在服务器中执行任何操作。
public 角色,权限可以被修改,所有的login都会继承public角色的权限
3,特殊的public角色
public角色分为:数据库级别和服务器级别
- 对于数据库级别的public角色,任何数据库的用户(User)都属于public角色
- 对于服务器级别的public角色,任何服务器的登录(Login)都属于public角色
虽然public角色属于固定(服务器级别和固定数据库级别)的角色,但是其特殊之处在于:角色的权限可以被修改。
每个 SQL Server 的登录(Login)均属于 public 服务器角色,所有的数据库用户(User) 都属于public数据库角色。用户不能删除public角色,但是,可以授予或收回public角色的权限。默认情况下,public角色被分配很多权限,大部分权限都跟数据库中的日常操作有关。默认情况下,
- 数据库级别的public 角色拥有的权限:查看特定系统表
- 服务器级别的public 角色拥有的权限:查看数据库,链接服务器(VIEW ANY DATABASE, CONNECT)
当一个对象对所有用户或登录可用时,只需把权限分配给 public 角色即可。默认情况下,所有的数据库用户都属于public角色,因此,授予或回收public角色的权限,将会影响所有的用户。
参考文档:
GRANT Object Permissions (Transact-SQL)
GRANT Database Principal Permissions (Transact-SQL)
GRANT Database Permissions (Transact-SQL)
Security2:角色和权限的更多相关文章
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
1 三者的字典表 1.1 用户 select * from dba_users; select * from all_users; select * from user_users; 1.2 角色 s ...
- 用户、角色、权限三者多对多用hibernate的一对多注解配置
用户.角色.权限三者多对多用hibernate的一对多注解配置 //权限表@Table(name = "p")public class P { @Id @GeneratedValu ...
- SQL Server 数据库的安全管理(登录、角色、权限)
---数据库的安全管理 --登录:SQL Server数据库服务器登录的身份验证模式:1)Windows身份验证.2)Windows和SQL Server混合验证 --角色:分类:1)服务器角色.服务 ...
- Entrust是一种为Laravel5添加基于角色的权限的简洁而灵活的方法。
安装 首先要在composer.json中添加: "zizaco/entrust": "5.2.x-dev" 然后运行composer install 或者 c ...
- ASP.NET MVC 基于角色的权限控制系统的示例教程
上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...
- Oracle用户及角色的权限管理[Oracle基础]
1.查看全部用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角 ...
- RBAC(Role-Based Access Control,基于角色的权限访问控制)—权限管理设计
RBAC模型的核心是在用户和权限之间引入了角色的概念,将用户和权限进行解耦,采用用户确定角色,角色分配权限,进而间接达到给用户分配角色的目的 这样采用的方式优点在于 (1)降低管理成本--由于一个角色 ...
- IdentityServer4实战 - 基于角色的权限控制及Claim详解
一.前言 大家好,许久没有更新博客了,最近从重庆来到了成都,换了个工作环境,前面都比较忙没有什么时间,这次趁着清明假期有时间,又可以分享一些知识给大家.在QQ群里有许多人都问过IdentityServ ...
- oracle角色、权限和用户
oracle角色.权限和用户 [转贴 2010-1-25 10:29:45] 字号:大 中 小 Oracle内置角色connect与resource的权限 首先用一个命令赋予user用户con ...
随机推荐
- .net 和 core 数据库连接字符串
Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-xxxx.mdf;Initial Catalog= ...
- Lua脚本语法说明(转):
Lua脚本语法说明(增加lua5.1部份特性) 转自:http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html Lua 的语法比较简单,学 ...
- 什么是 .live()
很多开发者都知道jQuery的.live()方法,他们大部分知道这个函数做什么,但是并不知道是怎么实现的,所以用的并不那么舒适.而且他们却从未听过还有解除绑定的.live()事件的.die()方法.即 ...
- Ubuntu 配置Mysql远程连接
首先安装mysql.mysqlclient sudo apt-get install mysql-server mysql-clientsudo apt-get install libmysqlcli ...
- JavaScript动画
早期的JS动画 早期的JS循环动画主要是通过setInterval/setTimeout实现的 function jump() { console.log("我跳了一下"); } ...
- 关于安装AndroidStudio中遇见的问题
安装AndroidStudio: 最近,准备了解下Android,就买了本<第一行代码Android:第二版>, 最开始就是安装AndroidStudio,刚开始以为安装的挺容易的,结果… ...
- 第二章 Google guava cache源码解析1--构建缓存器
1.guava cache 当下最常用最简单的本地缓存 线程安全的本地缓存 类似于ConcurrentHashMap(或者说成就是一个ConcurrentHashMap,只是在其上多添加了一些功能) ...
- [SCOI2012]奇怪的游戏
题目 话说有没有跟我一样直接猜了一个最大值不会改变这样一个二乎乎的结论之后交上去保龄的呀 首先看到棋盘,选择相邻的格子,非常经典的黑白染色 显然那个二乎乎的结论是错的,随便就能\(hack\)了 于是 ...
- 【转】使用URL SCHEME启动天猫客户端并跳转到某个商品页面的方法
在项目中遇到了这样一个需求:让用户在手机应用中,点击一个天猫的商品链接(知道商品在PC浏览器里的地址),直接启动天猫的客户端并显示这个商品.以前曾经实现过类似的功能,不过那次是淘宝的商品,天猫和淘宝的 ...
- Day2 Spring初识(二)
Bean的实例化 bean实例化方式有3种:默认构造.静态工厂.实例工厂 默认构造 调用无参构造, 属性+setter User.java package entity; public class U ...