データベースのすべてのテーブルへのアクセスを許可する


13

私は最近、サーバーの一人のユーザーとの定期的なアクセス権を共有したいと思ったし、私は簡単なことを実現CREATE USERし、GRANT ALL ON DATABASEコマンドは彼が単純で実行できなかったSELECTデータのを。

特定のデータベースのすべてのテーブルへの権限を特定のユーザーに付与しpublicたいのですが、何らかの特権を許可するかどうかわからないため、スキーマ全体へのアクセスを許可するのが最善のアイデアかどうかわかりませんエスカレーション。他の方法はありますか?


なぜあなたはちょうどできないのですGRANT SELECT ON TableName TO [Domain\User]か?db_datareaderすべてのテーブルへの読み取りアクセスのみが必要な場合は、通常、ユーザーをロールに割り当てますが、どの程度の粒度が必要かはわかりません。
クリスGruttemeyer

データベース内のすべてのテーブルにすべてのCRUDを付与したいと思います。また、このデータベース内でDROPpingとCREATEを行うことも有用である可能性があります。
d33tah

回答:


19

この権限はDATABASE、データベースへの一般的な接続権限のみを付与し、それ以上は付与しません。その特権だけを持つユーザーは、一般の人々が見ることを許可されているものしか見ることができません。

すべてのテーブルへの読み取りアクセスを許可するには、すべてのスキーマとテーブルに対する権限も必要です。

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

将来のスキーマとテーブルにデフォルトの特権を設定することもできます。データベースにオブジェクトを作成するすべてのロールに対して実行

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

ただし最初にコンセプト全体理解する必要があります。
そして、ほとんどの場合、グループロールに特権をバンドルしてから、グループロールをユーザーロールに付与/取り消しする方が適切です。関連:


あるmyusrタイプミスは?そうではありませんmyuserか?
アトモス

1
@attomos:この例では、別のユーザーになるはずです。明確にした。
アーウィンブランドステッター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.