SQL Server中查询用户的对象权限和角色的方法

--SQL Server中查询用户的对象权限和角色的方法

-- 查询用户的object权限

exec sp_helprotect NULL, ‘sa‘

-- 查询用户拥有的role

exec sp_helpuser ‘public‘

-- 查询哪些用户拥有指定的系统role

exec sp_helpsrvrolemember ‘sysadmin‘

-- 可查询嵌套role

WITH tree_roles as

(

SELECT role_principal_id, member_principal_id

FROM sys.database_role_members

WHERE member_principal_id = USER_ID(‘UserName‘)

UNION ALL

SELECT c.role_principal_id,c.member_principal_id

FROM sys.database_role_members as c

inner join tree_roles

on tree_roles.member_principal_id = c.role_principal_id

)

SELECT distinct USER_NAME(role_principal_id) RoleName

FROM tree_roles

-- 其他权限相关基本表

select * from sysusers

select * from syspermissions

-- Who has access to my SQL Server instance?

SELECT

name as UserName, type_desc as UserType, is_disabled as IsDisabled

FROM sys.server_principals

where type_desc in(‘WINDOWS_LOGIN‘, ‘SQL_LOGIN‘)

order by UserType, name, IsDisabled

-- Who has access to my Databases?

SELECT

dp.name as UserName, dp.type_desc as UserType, sp.name as LoginName, sp.type_desc as LoginType

FROM sys.database_principals dp

JOIN sys.server_principals sp ON dp.principal_id = sp.principal_id

order by UserType

select * from sys.database_principals

-- Server Roles

select

p.name as UserName, p.type_desc as UserType, pp.name as ServerRoleName, pp.type_desc as ServerRoleType

from sys.server_role_members roles

join sys.server_principals p on roles.member_principal_id = p.principal_id

join sys.server_principals pp on roles.role_principal_id = pp.principal_id

where pp.name in(‘sysadmin‘)

order by ServerRoleName, UserName

-- Database Roles

SELECT

p.name as UserName, p.type_desc as UserType, pp.name as DBRoleName, pp.type_desc as DBRoleType, pp.is_fixed_role as IfFixedRole

FROM sys.database_role_members roles

JOIN sys.database_principals p ON roles.member_principal_id = p.principal_id

JOIN sys.database_principals pp ON roles.role_principal_id = pp.principal_id

where pp.name in(‘db_owner‘, ‘db_datawriter‘)

-- What can these users do?

SELECT

grantor.name as GrantorName, dp.state_desc as StateDesc, dp.class_desc as ClassDesc, dp.permission_name as PermissionName ,

OBJECT_NAME(major_id) as ObjectName, GranteeName = grantee.name

FROM sys.database_permissions dp

JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id

JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id

where permission_name like ‘%UPDATE%‘

http://blog.itpub.net/66009/viewspace-1060533/

时间: 2024-07-30 03:21:22

SQL Server中查询用户的对象权限和角色的方法的相关文章

SQL Server中授予用户查看对象定义的权限

  在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数.视图授予查看定义的权限,那么就像下面脚本所示,比较繁琐: GRANT VIEW DEFINITION ON  YOUR_PROCEDURE TO   USERNAME; GRANT VIEW DEFINITION ON  YOUR_FUNCTION TO USERNAME; GRANT VIEW DEFINITION ON  YOUR_VIEW T

此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 Microsoft SharePoint 2010 产品的“开始”菜单启动. 问题原因:服务器场系统域帐号webrun密码已过期. 解决办法:设置该系统域帐号密码永不过期.

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据

从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在64位的机器上,通过访问接口:OracleProvide for OLE DB,来实现. 1.机器环境和软件环境 操作系统是:windows 7旗舰版 64位,SQL Server 20008R2  64  位,Oracle 11g 11.2.0.1.0   64 位. 2.ORACLE环境的设置 连接orac

【转载】SQL Server中查询CPU占用高的SQL语句

本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL语句 SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_ex

SQL 2005 中查询或执行另外的数据库操作的方法

原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢? 1.Synonym 2.openquery 3.Linked Servers Server Object-->Linked Servers--> serverType 选择 SQL Server, 在 Security 中 选择"Be made using this se

在SQL Server中创建用户角色及授权

参考文献 http://database.51cto.com/art/201009/224075.htm 正文 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许连接 SQL Server 服务器的权利: 获得访问特定数据库中数据的权利(select, update, delete, create table ...). 假设,我们准备建立一个 dba 数据库帐户,用来管理数据库 mydb. 1. 首先在 SQL Server 服务器级别,创建登陆帐户(cr

Sql Server中查询今天、昨天、本周、上周、本月、上月数据

在做Sql Server开发的时候有时需要获取表中今天.昨天.本周.上周.本月.上月等数据,这时候就需要使用DATEDIFF()函数及GetDate()函数了. DATEDIFF ( datepart , startdate , enddate ) 释义:计算时间差 datepare值:year | quarter | month | week | day | hour | minute | second | millisecond startdate:开始日期 enddate :结束日期 Ge

SQL SERVER中查询参数为空(null)时默认查询所有的实现

最近在项目中碰到一个比较有意思的问题,网上查找了一些方法,在这里总结分享一下. 我们经常会碰到这样的场景:需要查询数据,有一些查询条件,但是查询的时候,我们希望在某个条件为空的时候,则不筛选这个条件,处理的思路主要有这么几种: 1.程序收集查询查询条件的时候处理,这种适合动态SQL的,拼接SQL的时候根据参数是否为空来决定是否拼接对应的查询条件. 2.SQL中处理,这种情况适合存储过程,参数固定的场景,或者是非拼接where条件的场景,存储过程中一般没有使用拼接SQL的方式,那么如何实现参数为n