私はプログラマーであり、dbaではありません...私は危険なだけのことを知っています。
私は、データベースのdb_ownerであるレガシーユーザーを持つデータベースを継承しました。ビジネス上の理由から、既存のテーブル、スキーマなどに対するこのユーザーの権限を調整することはできませんが、いくつかの新しいテーブルが作成されており、このユーザーにそれらのSELECTアクセスのみを許可します。
これらのテーブルに対するこのユーザーの権限が設定されているため、GRANTに設定されているSELECTを除いてすべてが拒否されます。
ただし、このユーザー(dbadmin)がこれらのテーブル(AccountingAudit)の1つでSELECTを実行しようとすると、次のエラーが発生します。
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
このSQLを実行して、このテーブル/ユーザーに設定されている権限を確認しました。
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
そして、これは私が返すものです:
AccountingAudit dbadmin dbo ALTER DENY
AccountingAudit dbadmin dbo CONTROL DENY
AccountingAudit dbadmin dbo DELETE DENY
AccountingAudit dbadmin dbo INSERT DENY
AccountingAudit dbadmin dbo REFERENCES DENY
AccountingAudit dbadmin dbo SELECT GRANT
AccountingAudit dbadmin dbo TAKE OWNERSHIP DENY
AccountingAudit dbadmin dbo UPDATE DENY
AccountingAudit dbadmin dbo VIEW DEFINITION DENY
AccountingAudit dbadmin dbo VIEW CHANGE TRACKING DENY
それは正しく機能しているようです?
私が行っているSELECT呼び出しは、SSMS内からの非常に基本的なSELECT * FROM AccountingAuditです。私は特別なsp_executesqlやそのようなことをしていません。
私は明示的に許可を与えようとしました:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
これは効果がありません(なぜそうなのか、上記のクエリはすでに許可されていることを示しています!;-)
私はstackoverflow.comやその他の場所を検索しましたが、まだ試していないものは見つかりません。スキーマの設定方法と関係があるのでしょうか。(現時点では、スキーマについてはほとんど知りません。)
何か案は?ありがとう!