私はMS SQLに不慣れで、サービスプロバイダーにベストプラクティスの使用を望んでいるシステム管理者の経験が限られているWeb開発者としてこの質問をしています。
ホスティング会社が提供するリモートMSSQLサーバー上に1つのデータベースがあります。私たちのホスティング会社の他のクライアントは、データベースにこれと同じサーバーを使用しています。 Microsoft SQL Server Management Studio Expressを使用してサーバーにログインすると、サーバー上のすべてのデータベースの名前やすべてのログインなど、多くの情報を確認できます。
他のクライアントのデータベースにアクセスしたり、パスワードを確認したりすることはできませんが、この情報を確認することさえできるのは不思議に思えます。私は確かに他のクライアントに私のデータベースの名前や私のログインを知られたくないのです。私がサービスプロバイダーにこの懸念を提起したとき、これは彼の返事でした:
SQLの担当者に確認したところ、残念ながらMSSQLサーバーの制限であると彼は言いました。データベース名は表示されますが、そのデータベースのパスワードがないと、データベースにアクセスできません。
これは、ログイン後に表示されるものです。
これはSQL Serverをセットアップする正しい方法ですか?答えがノーであり、データベースをホストする他の誰かを見つける必要があるという私の疑いを確認または拒否してください。
開発側から言えば、管理者はすべてのユーザーを自分のデータベースにロックダウンできるはずです(メタデータの場合はおそらくマスターも同様です)。 MSDNから、 SQL Server seurables のリストにはデータベースが含まれ、 permissions にはデータベースを表示することさえできることが含まれています。 ここ は、データベースのMSDNセキュリティに関する考慮事項へのリンクです。
Management Studioは、sys.databasesからデータベースのリストを取得します。 sys.databases のデフォルトの権限は、ログインごとに自分のデータベースのみを表示することです。
Sys.databasesの呼び出し元がデータベースの所有者ではなく、データベースがmasterまたはtempdbではない場合、対応する行を表示するために必要な最小の権限は、ALTER ANY DATABASEまたはVIEW ANY DATABASEサーバーレベルの権限、またはCREATE DATABASE権限です。マスターデータベース。呼び出し元が接続されているデータベースは、いつでもsys.databasesで表示できます。
独自のデータベース以外のデータベースを表示するログインがある場合は、CREATEDATABASEなどの不要な権限がログインにあることを意味します。
すべてのログインに対してデータベースを非表示にするには、パブリックサーバーの役割から「VIEWANYDATABASE」権限を削除/取り消します。
http://sqlism.blogspot.com/2014/10/preventing-logins-and-users-to-see.html
これにより、他のDBとユーザーは非表示になりますが、1人のユーザーのみが表示されます(おそらく、何をしているのでしょうか)。 MS SQL 2008R2でテストしました。
Server Management Studioの場合:
共有ホストとしてこのようにMSSQLを使用しても、私はまったく望ましいとは思いませんが、料金を支払う必要があります。契約の契約条件で、独自のSQLインスタンスを取得し、共有インスタンスでのみデータベースを取得するように指示されていない場合は、実際に支払いを行っています。