
複数のスキーマを持つ単一のデータベースを利用するマルチテナント アプリケーションを作成しています。各テナントには、それぞれ独自のログイン/パスワードがあります。特定のスキーマへの表示権限を制限することができました。
私が遭遇し続ける唯一の問題は、スキーマを更新するときです。現在、適切なスキーマ資格情報を使用して C# コード ログインを行い、特定の (またはすべての) スキーマを更新するたびに SQL コードを実行しています。
最初はテーブルを変更しようとしましたが、権限が足りないことに気付きました。そこで権限を再度調整しました。現在、すべてのスキーマにフルテキスト インデックスを追加しようとしていますが、権限がないというメッセージが表示されます。
the database owner for a specific schema
私の質問は単純です。データベース上で実行されるスクリプトで問題が発生しないように、ユーザーの権限をどのように定義すればよいでしょうか。
答え1
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>;
すべての権限を付与しますスキーマおよびスキーマに含まれるオブジェクトに適用可能ただし、非スキーマオブジェクトに適用される権限は付与されません。たとえば、フルテキストカタログには適用されません。ないスキーマ バインドされたオブジェクト (FT カタログの作成時にスキーマを指定しない) であり、特別なCREATE FULLTEXT CATALOG
権限が必要です。
あなたの場合、セキュリティ モデル全体を見直し、テナントに要求される/許可される権限とアクションを決定する必要があります。簡単な万能の答えはありません。テナントに完全な db_owner のように行動する自由を与える場合は、真のデータベースを与える必要があります。スキーマをこっそりと挿入してデータベースのように見せかけることはできません。SQL セキュリティ モデルはそのような動作をしません。回避しようとするよりも、従う方がよいでしょう。
答え2
それは不可能だと思います。dbo であれば、そのデータベースで必要な操作はすべて実行できます。dbo でない場合は制限があります。データベース所有者とは、そのデータベースの所有者のことです。