我需要FO如下:对象权限-TSQL
- 检查
Public
或guest
授予对象(数据库角色和服务器角色) - 检查任何权限,如果任何用户对授予的权限一个对象而不是角色。
- 检查,如果用户对某个对象
with grant
权限 - 检查谁有权访问的扩展存储过程(这是我从
select name from sysobjects where xtype='X'
获得)
我认为他们都是相互关联的(但不要”不知道如何)。
对此有何建议?
或直接给我有用的表?
任何帮助将非常感激。
我需要FO如下:对象权限-TSQL
Public
或guest
授予对象(数据库角色和服务器角色)with grant
权限select name from sysobjects where xtype='X'
获得)我认为他们都是相互关联的(但不要”不知道如何)。
对此有何建议?
或直接给我有用的表?
任何帮助将非常感激。
下面是从SQL Server Central.com为#3的好PROC
http://www.sqlservercentral.com/scripts/Permissions/64309/
我想你可以修改它#4
它适用于SQL 2000,但文章非常有用,谢谢! – 2009-07-21 01:25:18
在MSSQL 2005/2008 - 使用SELECT CURRENT_USER您可以获得当前用户名 - 使用sp_helpuser可以获得当前用户角色 - 使用sys.obecjts,sys.database_principals和sys.database_permissions可以获得用户特权。
假设你至少有2005年的SQL ...
相关的元数据存储在sys.database_permissions数据库的安全对象,并在sys.server_permissions服务器级别的安全对象。您从sys.database_principals,服务器负责人(登录服务器角色)sys.server_principals获得数据库负责人(用户和角色)的列表。
这将为您显示明确权限的列表,但您还需要考虑未声明的隐式权限。某些组具有隐式权限。更复杂的是,你还必须处理Windows组成员身份,这些成员身份不在任何SQL视图内声明,但在进行访问检查时会被考虑。最后,访问规则非常复杂:通过明确的授予,委托人可以通过加入授予该特权的组成员来获得特权,但任何DENY都胜过所有授予并必须考虑的事项,除了可以安全所有权胜过任何DENY。锦上添花的是系统管理员成员资格,胜过所有特权规则:系统管理员根据定义拥有所有特权。
您可以通过EXECUTE AS假冒主体并检查fn_my_permissions的输出以验证所需安全性,从而验证大多数校长的任何安全特权。
像这样:
Create View vwObjectPermissions AS
select schema_name(o.schema_id) as [Schema_Name]
, o.name as [object_name]
, u.name as [principal_name]
, u.type_desc as [principal_type]
, r.minor_id, r.permission_name, r.state_desc
, o.schema_id, o.principal_id as [alt_owner], o.type_desc
from sys.database_permissions r
Left Join sys.database_Principals u
ON r.grantee_principal_id = u.principal_id
Left Join sys.all_objects o
ON o.object_id = r.major_id
Where class_desc NOT IN ('database')
GO
--1. Check if Public or guest is granted any permission on an object (database role and server role)
Select * from vwObjectPermissions
Where principal_name IN ('Public','Guest')
--2. Check if any user is granted permissions on an object rather than roles.
Select * from vwObjectPermissions
Where principal_type NOT LIKE '%ROLE%'
--3. Check if a user has "with grant" previliges on an object
Select * from vwObjectPermissions
Where state_desc = 'WITH GRANT' --check the spelling on this one
--4. Check who has access to extended stored procedures (which I get from select name from sysobjects where xtype='X')
Select * from vwObjectPermissions
Where type_desc LIKE '%X%Proc%'
GO
drop view vwObjectPermissions;
什么版本:这是真的** **重要。 – RBarryYoung 2009-07-21 01:13:45
同意。但我认为这是SQL 2000.因为Manjot说关于sysobjects,而不是sys.objects :) – 2009-07-21 01:26:23
Microsoft SQL Server 2005(SP2) – Manjot 2009-07-21 01:27:05