标签:
/*------------------------------------------------------------------------------------ 【服务器级别—服务器角色】 ------------------------------------------------------------------------------------*/ -- 查看固定服务器角色(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 rsp.principal_id as [role_principal_id],rsp.name AS [Server_Role] ,sp.principal_id,sp.name,sp.[sid] ,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.create_date,sp.modify_date,sp.is_disabled FROM sys.server_principals sp INNER JOIN sys.server_role_members srm ON sp.principal_id=srm.member_principal_id INNER JOIN sys.server_principals rsp ON srm.role_principal_id=rsp.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_addrolemember @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 --对于数据库级别权限控制更改:某数据库——>安全性——角色——>数据库角色——>右键角色——>可自行添加成员
/*------------------------------------------------------------------------------------ 【数据库级别-应用程序角色】 ------------------------------------------------------------------------------------*/ 应用程序角色是一个数据库主体,只能通过其他数据库中为 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
标签:
原文地址:http://blog.csdn.net/kk185800961/article/details/45998325