各位前輩好
目前有一個問題:
SQL Server SSMS中,建立兩位A、B者及兩個資料庫A、B
如何讓A登入只看到A資料庫顯示出來,且針對A資料庫只有
唯讀權限。
參考作法如下:
1.創建登入帳戶:
開啟 SQL Server Management Studio (SSMS) 並以 sa 或其他具有適當權限的帳戶登入。然後,創建兩個登入帳戶,一個為使用者A,一個為使用者B。以下是一個示例 T-SQL 命令:
sql
Copy code
CREATE LOGIN UserA WITH PASSWORD = 'YourPasswordA';
CREATE LOGIN UserB WITH PASSWORD = 'YourPasswordB';
2.創建資料庫使用者:
為了讓使用者A只能訪問資料庫A,您需要為使用者A創建一個資料庫使用者。同樣,這是一個示例 T-SQL 命令:
sql
Copy code
USE DatabaseA;
CREATE USER UserA FOR LOGIN UserA;
請確保將 "DatabaseA" 替換為您的實際資料庫名稱。
3.授予只讀權限:
現在,您需要授予使用者A只讀權限。您可以使用以下 T-SQL 命令來實現:
sql
USE DatabaseA;
ALTER ROLE db_datareader ADD MEMBER UserA;
這將讓使用者A成為 "db_datareader" 角色的成員,該角色具有對資料庫中所有表的只讀權限。
4.設定資料庫層級的權限:
確保使用者A無法訪問資料庫B,您可以在資料庫層級上配置權限。使用以下 T-SQL 命令:
sql
USE DatabaseB;
DENY CONNECT SQL TO UserA
這將禁止使用者A連接到資料庫B。
您的指令看起來是沒什麼問題,但我一般會直接用SSMS的GUI來操作
補個圖:
!
Hi Sam
但這樣不論A或B登入SSMS,展開資料庫還是都會看到A、B資料庫
有辦法讓A登入只看到A資料庫,看不到B資料庫在列表上嗎?
感謝解惑
會看的到其他資料庫是因為建立登入時預設會帶這個Public伺服器角色,而且還無法取消勾選...
您可能需要去修改Public這個伺服器角色的權限才行
剛剛看了一下,應該是在這個地方改,由於我現在沒有測試的環境,只能截圖您自己試試看囉~把下圖裡授與的勾取消,並勾選拒絕,應該就OK了
Hi Sam
經測試,依上面作法,不論A、B登入SSMS,都只能看到系統資料庫
A、B料庫無法顯示,必須把A使用者加入A資料庫的DB_owner,才能
達成讓A登入只看到A資料庫,看不到B資料庫,問題是變成A使用者
對A有刪除的權限,但需求是只能有唯讀的權限。
懇請再解惑,謝謝。