我寫了連接到SQL服務器數據庫執行查詢一個簡單的C#代碼:SQL Server的GRANT,REVOKE權限用戶
cmd = new SqlCommand(txtQuery.Text.ToString().Trim(), con);
cmd.ExecuteNonQuery();
在我的分貝我有一個名爲myTB表。我有兩個用戶也:USER1(所有者),用戶2(創建新用戶)
我與user2的的用戶名和密碼登錄(連接到DB)!
我可以訪問由用戶1與查詢波紋管創建的表:
「從user1.myTB選擇*」
(我不知道爲什麼我收到錯誤此查詢:「select * from myTB」,現在就忘記它!)
現在我要REVOKE'select'來自user2的權限。我的意思是我不希望user2在由user1創建的myTB表上執行選擇查詢。
我該怎麼做纔是我困住的問題! 我使用了這個查詢,但沒有改變!
Q1: 「撤銷選擇ON user1.myTB從用戶2」
再次user2的可以做SELECT * FROM user1.myTB!爲什麼!?
請幫助我這個。 謝謝。
如果執行'SELECT * FROM myTB'就相當於告訴myTB在默認架構中存在的SQL Server(dbo,除非它已被更改)。在這種情況下,儘管你沒有明確說明它,但myTB顯然屬於user1的模式,這就是爲什麼'select * from user1.myTB'起作用的原因,因爲你已經正確指定了表的位置。一般來說,總是指定一個表格所在的模式,這是很好的做法,除非你是超級懶惰的,並且把所有的東西都留在dbo中,這在很多情況下都是令人不悅的。 – 2013-02-27 15:29:04
@StevePettifer謝謝:) – user1422847 2013-02-28 11:51:40
順便說一下,我偶爾會把自己包括在超級懶惰的類別中 - 那個特別的句子一般不是專門針對你或你的工作! :) – 2013-02-28 15:48:02