Saya seorang programmer, bukan dba ... Saya tahu cukup berbahaya.
Saya telah mewarisi database dengan pengguna lawas yang merupakan db_owner untuk database tersebut. Kami tidak dapat menyesuaikan izin pengguna ini untuk tabel, skema, dll yang ada, karena alasan bisnis, tetapi beberapa tabel baru sedang dibuat, dan saya hanya ingin pengguna ini memiliki akses SELECT pada mereka.
Izin telah ditetapkan untuk pengguna ini untuk tabel ini sehingga semuanya DITOLAK, kecuali SELECT, yang diatur ke GRANT.
Namun ketika pengguna ini (dbadmin) mencoba melakukan SELECT pada salah satu tabel ini (AccountingAudit), kesalahan ini terjadi:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Saya sudah menjalankan SQL ini untuk mencoba dan melihat izin apa yang ditetapkan untuk tabel / pengguna ini:
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
Dan inilah yang saya dapatkan:
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
Sepertinya itu harusnya bekerja dengan baik?
Panggilan SELECT yang saya buat adalah SELECT * yang sangat mendasar dari AccountingAudit, dari dalam SSMS. Saya tidak melakukan sp_executesql khusus atau semacamnya.
Saya sudah mencoba memberikan izin secara eksplisit:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Ini tidak berpengaruh (mengapa, kueri di atas sudah menunjukkan itu diberikan! ;-)
Saya telah mencari melalui stackoverflow.com dan tempat lain, dan tidak dapat menemukan apa pun yang belum saya coba. Saya bertanya-tanya apakah itu ada hubungannya dengan bagaimana pengaturan skema. (Pada titik ini saya tahu sedikit tentang skema.)
Ada ide? Terima kasih!