Sql-Server
如何創建只能訪問一個數據庫中的一個模式的登錄名和使用者
我已經執行了以下操作:
USE [MyDatabase]; GO CREATE LOGIN [MyDomain\MyAccount] FROM WINDOWS WITH DEFAULT_DATABASE=[MyDatabase]; CREATE USER [MyDomain\MyAccount] FOR LOGIN [MyDomain\MyAccount]; GRANT EXECUTE ON SCHEMA::[MySchema] TO [MyDomain\MyAccount]; GRANT SELECT ON SCHEMA::[MySchema] TO [MyDomain\MyAccount]; GRANT INSERT ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
(我沒有授予任何角色,因為我不希望此登錄名能夠訪問此數據庫中的任何其他模式。)
我以 MyDomain\MyAccount 身份執行 SSMS(以其他使用者身份執行)。然後我嘗試連接到這個實例。但是,我得到:
無法打開使用者預設數據庫。登錄失敗。
使用者“MyDomain\MyAccount”登錄失敗。(Microsoft SQL Server,錯誤:4064)
如果我在連接屬性中將預設數據庫設置為 MyDatabase,我會得到相同的結果。
我執行了 Profiler 跟踪並看到錯誤 18456 狀態 38:
使用者“MyDomain\MyAccount”登錄失敗。原因:無法打開明確指定的數據庫“MyDatabase”。
$$ CLIENT: MyIpAddress $$
隨後是錯誤 18456 狀態 40:
使用者“MyDomain\MyAccount”登錄失敗。原因:無法打開登錄屬性中指定的數據庫“MyDatabase”。
$$ CLIENT: MyIpAddress $$
MyDatabase 線上,我可以通過不同的登錄名輕鬆連接到它。我需要向 MyDomain\MyAccount 授予哪些額外權限?還有什麼我想念的嗎?
猜測您缺少連接權限。我一直認為這是與使用者一起創建的,但可能存在未添加的情況。
嘗試執行
USE [MyDatabase]; GO GRANT CONNECT TO [MyDomain\MyAccount];
您也可以嘗試更改預設架構
$$ MyDomain\MyAccount $$
ALTER USER [MyDomain\MyAccount] WITH DEFAULT_SCHEMA = MySchema;
最後,您可以使用我的sp_dbpermissions和sp_srvpermissions來查看使用者的權限。
EXEC sp_srvpermissions 'MyDomain\MyAccount'; -- Return instance level permissions EXEC sp_dbpermissions 'All','MyDomain\MyAccount'; -- Return DB level permissions for all databases