私は以下を実行しました:
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];
(このログインでこのデータベースの他のスキーマにアクセスできないようにするため、私はロールを付与していません。)
SSMSをMyDomain\MyAccountとして実行します(別のユーザーとして実行します)。次に、このインスタンスに接続しようとします。しかし、私は得ています:
ユーザーのデフォルトデータベースを開けません。ログインに失敗しました。ユーザーのログインに失敗しました
'MyDomain\MyAccount'。 (Microsoft SQL Server、エラー:4064)
接続プロパティでデフォルトのデータベースをMyDatabaseに設定しても、同じ結果が得られます。
プロファイラートレースを実行すると、エラー18456状態38が表示されます。
ユーザー 'MyDomain\MyAccount'のログインに失敗しました。理由:明示的に指定されたデータベース 'MyDatabase'を開くことができませんでした。 [クライアント:MyIpAddress]
その後にエラー18456状態40が続きます。
ユーザー 'MyDomain\MyAccount'のログインに失敗しました。理由:ログインプロパティで指定されたデータベース 'MyDatabase'を開けませんでした。 [クライアント:MyIpAddress]
MyDatabaseはオンラインであり、別のログインで接続することに問題はありません。 MyDomain\MyAccountに追加で付与する必要がある権限は何ですか?他に何か足りないものはありますか?
接続許可がないと思います。いつもユーザーで作成されていると思っていましたが、追加されない場合もあるかもしれません。
実行してみてください
USE [MyDatabase];
GO
GRANT CONNECT TO [MyDomain\MyAccount];
[MyDomain\MyAccount]のデフォルトスキーマを変更してみることもできます
ALTER USER [MyDomain\MyAccount] WITH DEFAULT_SCHEMA = MySchema;
最後に、my 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