特定のユーザーへのアクセスを制限する必要がありますが、dboが所有するテーブルのデータを表示できるようにする必要があります。
私は次のことをしようとしています:
- dboスキーマは通常どおり機能し、すべてにアクセスできます。
- schema1スキーマはschema1オブジェクトのみにアクセスできます
- schema1ビューまたはストアドプロシージャがdboが所有するテーブルのデータにアクセスする場合、パーミッションチェーンは適切に
- user1はschema1にアクセスできますが、他には何もありません。#3の場合を除く
私が試したものは次のとおりです。
- ランダムパスワードを使用してテストログインにマップされたuser1ユーザーを作成します
- dboスキーマにいくつかのテストデータを含むテーブルをいくつか作成しました
- schema1スキーマを作成しました
- dbo.people、dbo.taglinks、およびdbo.tagsのデータにアクセスするschema1.profilesというビューから選択するschema1.get_profilesを作成しました
ただし、user1としてログインしているときに次のステートメントを使用します。
EXEC get_profiles 1
結果:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
WITH EXECUTE AS OWNER
「所有権の連鎖」がどのように機能するかを理解しようと試みましたが、理解できません。
私も試しました
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
しかし、私は次のエラーを受け取ります(dboレベルのアクセス権を持つユーザーであるにもかかわらず):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
私が必要とするのは、私が提供するストアドプロシージャを介してデータにアクセスできるようにするためのuser1だけです。
さらに、これは最終的には既存のSQL Azureデータベースで実行することを目的としていますが、最初にローカルダミーデータベースに対してテストしています。