web-dev-qa-db-ja.com

SQL Serverが1つのスキーマのユーザーにCRUDを付与

trainingというスキーマがあります。そのスキーマの任意のオブジェクトに対するCRUD権限を持つようにトレーニングされるユーザーが欲しい。そのスキーマの外部にある他のオブジェクトに対して他の権限を付与したくないし、スキーマ自体の作成/削除権限も付与したくない。このタイプのアクセスを許可するための最小の権限は何ですか?

現在、スキーマtrainingをdboを所有者として設定しています。次に、training_modifyというロールを作成し、trainingスキーマをセキュリティ保護可能なものとして追加し、「選択」、「更新」、「挿入」、および「削除」を明示的に付与しました。最後に、ユーザーをそのロールに追加します。

これは正しいアプローチですか?意図しない結果はありますか?

1

これは正しいアプローチですか?

これは正しいアプローチです。そのロールを持つユーザーは、trainingスキーマ内のオブジェクトに対してのみCRUD操作を実行でき、それ以外は何も実行できません。これは最小特権のアプローチであり、正しいです。

真の最小特権は実際にはそのスキーマ内の特定のオブジェクトにのみアクセス許可を割り当てることですが、ユーザーがすべてのオブジェクトにアクセスできる必要があることを示したので、スキーマ全体にアクセス許可を適用することが適切です。

そのスキーマの外部にある他のオブジェクトに対して他の権限を与えたくない

あなたは実際にはこれを望まないかもしれません。 public サーバーの役割を検討してください。明示的なアクセス許可(GRANTまたはDENY)を持たないオブジェクトの場合、アクセス許可はユーザー(すべてのユーザー、すべてのユーザー)のパブリックロールから継承されます。

ユーザーからパブリックメンバーシップを取り消すことはできないため、Management Studioにリストされているオブジェクトがユーザーに表示されないようにするために、すべてのオブジェクトに対する権限を明示的に拒否する必要があります。これは本当に必要ですか?オブジェクトが存在することを確認する以外のアクセス権はなく、ユーザーはまだオブジェクトを操作できません。

パブリックアクセスは、デフォルトでユーザーにいくつかのシステムカタログビューへのアクセスを許可し、すべてのユーザーが基本オブジェクトの名前と定義、および基本的なDB /サーバー情報を表示できるようにします( この記事 を参照)より詳しい情報)。

3
HandyD