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).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角 ...
随机推荐
- iptables之链之间的跳转
创建一个新的链 按照管理,用户自定义的链用小写来区分它们 iptables -N newchain 可以在这个链的尾部跳转到INPUT链 iptables -A newchain -j INP ...
- java 入门 第二季3
1.继承 1.java是单继承的,一个子类只有一个父类 父类,基类 子类,派生类 2.继承的好处:子类拥有父类的所有属性和方法,属性的修饰符不能是private 3.语法规则: class 子类 ex ...
- ghost xp 安装IIS,并配置WCF
因要一台电脑做WCF服务的测试服务器,但只有一个台式机可能,配置就不用说了,2G内存.之前装的是win7,卡得要死.于是就想把它装回XP系统.但在网上找来找去,都是ghost xp,之前还很怕ghos ...
- 我刚知道的WAP app中meta的属性(转载)
之前我一直做的都是WEB前端开发,来北京以后面试了一个移动前端开发,WAP前端开发. 其实在原来公司的时候也做过这方面的开发,可面试的时候面试官问我,要想强制让文档与设备的宽度保持1:1,mate标签 ...
- 【leetcode】Anagrams (middle)
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- ios创建二维码
#import "LCTwoCodeImage.h" @implementation LCTwoCodeImage +(UIImage *) GotoCreatMyTwoCode ...
- 方法重载的小demo
方法的重载(overload)要求:1,同一个类中2,方法名必须相同3,方法的参数列表不同(1,参数的个数不同2,参数类型不同,但是参数名相同) 注:方法的重载与方法的返回值类型没有关系 packag ...
- Mac 下查看 Android Studio 的 SHA1的方法
cmd -> ->cd .android ->keytool -v -list -keystore debug.keystore 默认口令:android ************* ...
- JavaWeb学习--Servlet认识
Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...
- Rotate partitions in DB2 on z
Rotating partitions You can use the ALTER TABLE statement to rotate any logical partition to becom ...