我需要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