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).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角 ...
随机推荐
- ios 在程序中使用iCloud
注意,这里说的使用icould不是用icloud进行系统备份,那个功能不需要我们写代码,备份到icloud的东西我们也不能操作.我们指的是以下这3种icloud使用方法: 这里有3中使用方法, Key ...
- android课件和源代码
ppt.rar 代码.rar 也可以自己从这里下载http://pan.baidu.com/share/link?shareid=1287391506&uk=2634355140
- MongoDB 副本集的相关概念【转】
一.副本集基本概念 副本集(replica set) MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换. MongoDB的数据库复制增加了 ...
- Java for LeetCode 210 Course Schedule II
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- Java for LeetCode 206 Reverse Linked List
Reverse a singly linked list. 解题思路: 用Stack实现,JAVA实现如下: public ListNode reverseList(ListNode head) { ...
- Match:Censored!(AC自动机+DP+高精度)(POJ 1625)
Censored! 题目大意:给定一些字符,将这些字符组成一个固定长度的字符串,但是字符串不能包含一些禁词,问你有多少种组合方式. 这是一道好题,既然出现了“一些”禁词,那么这题肯定和AC自动机有点 ...
- 把图标改成web字体
一.下载自己想要的矢量图标,然后在AI中打开二.在AI中将有瑕疵的图标修改一下,再分别另存为svg格式的图标三.打开IcoMoon Web app网页,然后点击左上角的+Import Icons添加你 ...
- 监控Tomcat解决方案(监控应用服务器系列文章分享)
使用JMX接口开发监控程序 ◆ 全部代码需要从零开始,代码量较大 ◆ 支持各不同版本比较麻烦,每个版本可能有差异 ◆ 可支配性强 ◆ 最重要的一个缺点是,配置比较麻烦 Tomcat激活JMX远 ...
- java常用工具类(java技术交流群57388149)
package com.itjh.javaUtil; import java.util.ArrayList; import java.util.List; /** * * String工具类. ...
- 如何在yii的controller中调用外部action
问题: 在yii中,一个controller会包含若干个action.有时为了重用或代码管理等目的,我们希望这些action可以单独定义成一个类,然后在controller中使用.那么在yii中要如何 ...