2010-04-05 88 views

回答

0

你的意思是除了試圖寫入它的權利?

1
--for database (updated for newer versions) 
SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability') 

--for tables. 
SELECT 
    * 
FROM 
    sys.tables t 
    LEFT JOIN 
    sys.database_permissions dp2 ON dp2.major_id = t.object_id AND dp2.permission_name = 'SELECT' 
WHERE 
    NOT EXISTS (SELECT * FROM 
     sys.database_permissions dp 
     WHERE 
     dp.major_id = t.object_id 
     AND 
     dp.permission_name IN ('INSERT', 'DELETE', 'UPDATE')) 

修改*如需要得到你想要的東西:這個檢查無/ SELECT那裏沒有I/U/d權利

你也有FILEGROUPPROPERTY等,如果您有隻讀文件組

編輯:用於當前連接和每個用戶的直接表權限。不通過組層級迭代

SELECT 
    * 
FROM 
    sys.tables t 
    JOIN 
    sys.database_permissions dp2 ON dp2.major_id = t.object_id AND dp2.permission_name = 'SELECT' 
WHERE 
    dp2.grantee_principal_id = USER_ID() 
    AND 
    dp.permission_name IN ('INSERT', 'DELETE', 'UPDATE')) 
+0

我使用屬於public和db_datareader角色的帳戶連接到數據庫。證實它具有隻讀訪問權限,並且這些查詢都沒有表明我擁有隻讀訪問權限,從我所知道的情況來看。 – Rono 2010-04-08 02:34:17

+0

從這個意義上說,如果連接是隻讀的,則無法檢測到連接。我給出的第二個查詢會告訴你public和db_datareader沒有I/U/D權限,它們是相同的。 – gbn 2010-04-08 04:23:02

+0

我應該看哪些列來確定?我在一個只讀連接和一個可編輯連接上運行了第二個查詢,我沒有看到它們之間有用的區別。或者你說這是不可能的? – Rono 2010-04-18 02:34:34