SQLServer 维护脚本分享(04)服务器角色和数据库角色相关操作
/*------------------------------------------------------------------------------------
【服务器级别—服务器角色】
------------------------------------------------------------------------------------*/ -- 查看固定服务器角色(8个,不可增删,未包括public,每个用户都属于public服务器角色)
EXEC sp_helpsrvrole
EXEC sp_helpsrvrole @srvrolename = 'sysadmin' -- 查看服务器角色所拥有的权限说明(服务器角色详细权限说明!)
EXEC sp_srvrolepermission
EXEC sp_srvrolepermission @srvrolename = 'sysadmin' -- 判断某个登录账号是否拥有某个服务器角色(有则为1,否则为0)
SELECT IS_SRVROLEMEMBER('sysadmin')
SELECT IS_SRVROLEMEMBER('sysadmin','sa') -- 服务器角色在 SQL Server 2012 中可以创建!~
CREATE SERVER ROLE [ServerRoleKK] -- 将登录名添加为某个服务器级角色的成员
EXEC sp_addsrvrolemember @loginame= 'kk' ,@rolename = 'sysadmin' -- 从服务器级角色中删除 SQL Server 登录名或 Windows 用户或组
EXEC sp_dropsrvrolemember @loginame = 'kk' ,@rolename = 'sysadmin' -- 查看 服务器角色 和 成员 关系
EXEC sp_helpsrvrolemember
EXEC sp_helpsrvrolemember @srvrolename = 'sysadmin' -- 查看 服务器角色 和 成员 关系(更详细)
SELECT sp.name AS [login_name]
,CASE WHEN sp.[type]='S' THEN 'SQL 登录名'
WHEN sp.[type]='U' THEN 'Windows 登录名'
WHEN sp.[type]='G' THEN 'Windows 组'
WHEN sp.[type]='R' THEN '服务器角色'
WHEN sp.[type]='C' THEN '映射到证书的登录名'
WHEN sp.[type]='K' THEN '映射到非对称密钥的登录名'
END AS [principal_type]
,sp.is_disabled
,ISNULL(sp.default_database_name,'') as [default_database_name]
,ISNULL(rsp.name,'') AS [server_role]
,STUFF((SELECT ','+permission_name FROM sys.server_permissions spp where sp.principal_id=spp.grantee_principal_id for xml path('')),1,1,'') as [permissions]
FROM sys.server_principals sp
LEFT JOIN sys.server_role_members srm ON sp.principal_id=srm.member_principal_id
LEFT JOIN sys.server_principals rsp ON srm.role_principal_id=rsp.principal_id
ORDER BY [principal_type],sp.principal_id -- 查看服务器对象权限控制情况
SELECT sp1.principal_id AS grantor_principal_id,sp1.name AS grantor_name,sp1.type_desc AS grantor_type_desc
,sp2.principal_id AS grantee_principal_id,sp2.name AS grantee_name,sp2.type_desc AS grantee_type_desc
,spe.class_desc,spe.state_desc,spe.permission_name
FROM sys.server_principals sp1
INNER JOIN sys.server_permissions spe ON sp1.principal_id=spe.grantor_principal_id
INNER JOIN sys.server_principals sp2 ON sp2.principal_id=spe.grantee_principal_id --对于服务器级别权限控制更改:安全性——>登录名——右键登录账号——>属性——>安全对象——>搜索(有服务器/端点/登录名)——>下方控制权限 ------------------------------------------------------------------------------------------------------------------------------------ /*------------------------------------------------------------------------------------
【数据库级别—数据库角色】
------------------------------------------------------------------------------------*/ -- 查看固定数据库角色(不包括public角色,每个数据库用户都属于 public 数据库角色)
EXEC sp_helpdbfixedrole
EXEC sp_helpdbfixedrole @rolename = 'db_owner' -- 查看数据库角色所拥有的权限说明(数据库角色详细权限说明!)
EXEC sp_dbfixedrolepermission
EXEC sp_dbfixedrolepermission @rolename = 'db_owner' -- 当前数据库中有关角色的信息(至少10个固定数据库角色)
EXEC sp_helprole
EXEC sp_helprole @rolename = 'db_owner' --IsAppRole:是否应用程序角色 -- 某个角色的成员的信息
EXEC sp_helprolemember
EXEC sp_helprolemember @rolename = 'db_owner' -- 当前用户是否为指定 Microsoft Windows 组或 SQL Server 数据库角色的成员
SELECT IS_MEMBER('db_owner') -- 创建数据库角色(如创建角色 Myrole 并拥有db_owner角色)
CREATE ROLE MyRole AUTHORIZATION db_owner -- 授予角色权限(当前数据库中将数据库角色授予 数据库用户、数据库角色、Windows登录名或Windows 组)
EXEC sp_addrolemember @rolename= 'MyRole',@membername = 'MyUser' -- 回收角色权限(当前数据库中将数据库角色回收,同上相反)
EXEC sp_droprolemember @rolename= 'MyRole',@membername = 'MyUser' -- 更改角色名称
ALTER ROLE MyRole WITH NAME = NewRole -- 删除角色
DROP ROLE NewRole -- 当前 数据库角色 与 用户 关系
SELECT u.name as UserName,u.type_desc,u.default_schema_name,g.name as DBRole
FROM sys.database_principals u
inner join sys.database_role_members m on u.principal_id = m.member_principal_id
inner join sys.database_principals g on g.principal_id = m.role_principal_id
ORDER BY UserName,DBRole --对于数据库级别权限控制更改:某数据库——>安全性——角色——>数据库角色——>右键角色——>可自行添加成员 ------------------------------------------------------------------------------------------------------------------- --查看用户各对象的权限: SELECT pr.name,pe.state_desc,pe.permission_name,o.name,o.type_desc
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
JOIN sys.objects AS o ON pe.major_id = o.object_id
WHERE pr.name = '' --user_name
AND o.name = '' -- object_name -------------------------------------------------------------------------------------------------------------------
--系统中所有数据库授权情况: SELECT A.name,schema_name(A.schema_id) [schema],A.type,b.permission_name,B.type,B.state_desc,C.name,c.type_desc
FROM sys.all_objects AS A
INNER JOIN sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1
INNER JOIN sys.database_principals AS C ON C.principal_id = B.grantee_principal_id
ORDER BY A.name -------------------------------------------------------------------------------------------------------------------
--账户映射的数据库用户:
SELECT isnull(s.name,'') as [login_name]
,isnull(s.default_database_name,'') as [default_database_name]
,u.name as [user_name]
,u.default_schema_name
,g.name as [database_role]
FROM sys.database_principals u
inner join sys.database_role_members m on u.principal_id = m.member_principal_id
inner join sys.database_principals g on g.principal_id = m.role_principal_id
left join sys.server_principals s on u.sid = s.sid
ORDER BY [login_name],[default_database_name],[database_role] -------------------------------------------------------------------------------------------------------------------
/*------------------------------------------------------------------------------------
【数据库级别-应用程序角色】
------------------------------------------------------------------------------------*/ /*应用程序角色是一个数据库主体,只能通过其他数据库中为 guest 授予的权限来访问这些数据库
其他数据库中的应用程序角色将无法访问任何已禁用 guest 的数据库
可以只允许通过特定应用程序连接的用户访问特定数据
与数据库角色不同的是,应用程序角色默认情况下不包含任何成员,而且是非活动的
启用应用程序角色需要密码
应用程序角色无法访问服务器级元数据,若允许访问,需开启跟踪标志4616( DBCC TRACEON(4616,-1))*/ -- 创建应用程序角色
CREATE APPLICATION ROLE [MyAppRole] WITH DEFAULT_SCHEMA = [dbo], PASSWORD = N'AppRole' -- 更改应用程序角色的名称、密码或默认架构
ALTER APPLICATION ROLE [MyAppRole]
WITH NAME = [AppRole],
PASSWORD = 'AppRole',
DEFAULT_SCHEMA = [dbo] -- 激活与当前数据库中的应用程序角色关联的权限(不能在其他存储过程或用户定义事务中执行)
DECLARE @cookie varbinary(8000)
EXEC sp_setapprole
@rolename = 'AppRole'
, @password = 'AppRole'
--, @password = { encrypt N'AppRole' } --ODBC encrypt 函数加密
, @encrypt = 'none' --'none'|'odbc':是否模糊加密处理
, @fCreateCookie = true -- true|false :是否创建 cookie
, @cookie = @cookie OUTPUT --获取应用程序角色之前安全上下文
SELECT @cookie --记住cookie -- 查看当前登录用户(发现为 [AppRole])
SELECT CURRENT_USER,USER_NAME() -- 停用应用程序角色并恢复到前一个安全上下文(cookie 为sp_setapprole创建的)
EXEC sp_unsetapprole @cookie = 0x5E76DB4EF3E20388C5CBDE4FEB63DC409BAAD344D11919EF23AF18743A8B40BBEB3F972E3D84C5F7FBE2C1A853934EBC0100 -- 删除应用程序角色
DROP APPLICATION ROLE [AppRole] -- 查看用程序角色
SELECT * FROM sys.sysusers WHERE isapprole = 1 -------------------------------------------------------------------------------------------------------------------
--当前所有权限:
select * from sys.fn_builtin_permissions(default)
SQLServer 维护脚本分享(04)服务器角色和数据库角色相关操作的更多相关文章
- SQLServer 维护脚本分享(08)临时数据库(tempdb)
dbcc sqlperf(logspace) --各数据库日志大小及使用百分比 dbcc loginfo --查看当前数据库的虚拟日志文件 --临时表'Tempdb'最近使用情况 SELECT t1. ...
- SQLServer 维护脚本分享(09)相关文件读取
/********************[读取跟踪文件(trc)]********************/ --查看事件类型描述 SELECT tc.name,te.trace_event_id, ...
- SQLServer 维护脚本分享(11)部分DBCC及系统存储过程
--DBCC命令与用法 DBCC HELP('?') DBCC HELP('useroptions') DBCC USEROPTIONS WITH NO_INFOMSGS --当前DB的区及文件 DB ...
- SQLServer 维护脚本分享(05)内存(Memory)
--查看设置的最大最小每次 exec sp_configure 'max server memory (MB)' exec sp_configure 'min server memory (MB)' ...
- SQLServer 维护脚本分享(06)CPU
--CPU相关视图 SELECT * FROM sys.dm_os_sys_info SELECT * FROM sys.dm_exec_sessions SELECT * FROM sys.sysp ...
- SQLServer 维护脚本分享(07)IO
sp_helpfile --当前数据库文件分配情况 sp_spaceused --当前db空间大小(有时不准) sp_spaceused 'dbo.user' --指定表的空间大小(有时不准) sp_ ...
- SQLServer 维护脚本分享(10)索引
--可添加索引的字段 migs.user_seeks,migs.avg_total_user_cost,migs.avg_user_impact,migs.last_user_seek ,mid.st ...
- SQLServer中服务器角色和数据库角色权限详解
角色 当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数 ...
- 转:SQL Server中服务器角色和数据库角色权限详解
当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角 ...
随机推荐
- android 和iOS的view上的区别
android上的view的类叫View, 以下是它的class overview, This class represents the basic building block for user i ...
- bind+dlz+mysql实现区域记录动态更新
BIND-DLZ实验:http://bind-dlz.sourceforge.net/ 实验环境:RHEL4,BIND-9.5.0-P2.tar.gz(9.4.0以上版本都已含DLZ补丁),Mysql ...
- Mathematics:Pseudoprime numbers(POJ 3641)
强伪素数 题目大意:利用费马定理找出强伪素数(就是本身是合数,但是满足费马定理的那些Carmichael Numbers) 很简单的一题,连费马小定理都不用要,不过就是要用暴力判断素数的方法先确定是 ...
- Oracle数据库对象题库
一. 填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...
- Could not find Developer Disk Image
测试机系统版本 iOS9.3,而Xcode7.2不支持 iOS9.3的真机测试,由于升级 Xcode 版本太慢,又急着看效果,怎么办呢?没事儿,只要找得到原因的问题就不是问题,现附上解决办法: 1)c ...
- 关于Cookie和Session的优缺点
关于Cookie和Session的优缺点 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. Cookie的优缺点:优点:极高的扩展性和可用 ...
- JavaScript基础——使用运算符
JavaScript运算符允许你改变一个变量的值.你已经熟悉了用于赋值给变量的=运算符.JavaScript提供了几种不同的运算符,它们可以划分为两大类:算数运算符和赋值运算符. 1.算数运算符 你可 ...
- 大话数据结构–1.基础知识+2.算法
2.算法: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每个指令表现为一个或多个操作. 特性:输入.输出.有穷性.确定性.可行性. 2.9.1.算法时间复杂度: 语句 ...
- MVC基础知识 – 2.新语法
1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 ...
- 重温WCF之WCF传输安全(十三)(3)基于SSL的WCF对客户端验证(转)
转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/18/2690719.html 上文我们演示了,客户端对服务器端身份的验证,这一篇来简单演示一下对 ...