Pengguna tidak dapat melihat tabel dalam skema non-default di SSMS

10

Saya mengalami masalah saat mengatur VIEW DEFINITIONizin di tingkat skema untuk salah satu pengguna saya. Saya telah membuat skema TestSchemadan menambahkan beberapa tabel. Pengguna saat ini memiliki izin diatur untuk mengakses & memodifikasi tabel ( SELECT, UPDATE, DELETE, dll) melalui dbo_datareaderdan dbo_datawriterperan. Namun, mereka tidak bisa melihat tabel di penjelajah objek SSMS.

Saya sudah mencoba memberikan izin untuk melihat definisi:

grant view definition on SCHEMA :: [TestSchema] to [User]

Itu tidak berhasil. Saya mencoba mengatur izin tingkat meja:

grant view definition on [TestSchema].[NewTable] to [User]

Itu juga tidak berhasil. Kemudian saya mencoba hanya hibah selimut:

grant view definition to [User]

Dan yang melakukan pekerjaan; mereka sekarang dapat melihat TestSchema, serta skema lain yang tidak seharusnya mereka akses.

Tujuan saya di sini adalah untuk memungkinkan pengguna melihat semua tabel dalam skema yang diberikan. Bagaimana saya mencapainya? Jika saya harus bisa melakukan hal ini secara default, apa hak akses yang harus saya cari di untuk menemukan mengapa saya tidak bisa?

eykanal
sumber
Pada contoh 2008R2 saya ketika saya memberikan db_datareader atau db_datawriter, mereka dapat melihat semua skema. Saya menyadari bukan itu yang Anda cari tetapi itu berarti ada perbedaan yang signifikan antara pengaturan Anda dan saya jadi saya tidak bisa mengujinya. Apakah versi yang berbeda atau ada keamanan lainnya telah dimodifikasi?
cfradenburg
@cfradenburg - Sulit dikatakan; ini adalah server yang dikelola oleh IT, jadi saya tidak yakin apa yang mereka lakukan, dan saya pemula SQL Server, jadi saya tidak tahu apa yang harus dicari. Saya kira sebagian dari pertanyaan saya adalah, izin / peran apa / ??? haruskah saya mencari untuk menentukan apakah ini bisa diperbaiki dengan izin?
eykanal
Bisakah pengguna menanyakan tabel? Jika mereka dapat meminta maka itu bisa saja menjadi masalah dalam SSMS.
user9164
@ user9164 Ya, pengguna dapat meminta tabel; itu hanya masalah melihatnya dalam SSMS.
eykanal

Jawaban:

11

Jawaban singkat: Jangan gunakan db_datareaderatau db_datawriteratau menolak mereka. Mereka hanya untuk kompatibilitas mundur. Menggunakannya akan menyebabkan masalah seperti yang Anda hadapi.

Jika Anda ingin memberikan izin utama Alice SELECT, INSERT, UPDATE dan DELETE ke semua objek bernilai tabel dalam skema Penjualan kemudian gunakan yang berikut ini.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Jika Anda ingin memberikan izin utama Alice SELECT, INSERT, UPDATE dan DELETE ke semua objek bernilai tabel di semua skema, gunakan yang berikut ini.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

Visibilitas metadata kemudian akan bekerja dengan benar.

Greenstone Walker
sumber
Apakah Anda memiliki sumber untuk bit 'kompatibilitas ke belakang'? Saya mengerti bahwa skema tersebut sudah usang, tetapi saya tidak dapat menemukan apa pun tentang peran tersebut.
Stijn
0

Lihatlah para pelaku izin lainnya mungkin ada penolakan di suatu tempat yang menyebabkan masalah. Ingatlah bahwa penolakan akan selalu berlaku di atas hibah. Dan karena itu bukan servr Anda, mungkin ada sesuatu di akun yang telah disiapkan departemen TI.

Gunakan sesuatu seperti ini untuk tingkat server:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

Dan sesuatu seperti ini di tingkat basis data

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO
Nick Winstanley
sumber
Terima kasih atas komentarnya, saya akan mencoba ini ketika saya kembali bekerja pada hari Senin.
eykanal
0

Ini terjadi pada saya ketika saya memutakhirkan SQL Server kami dari 2008R2 ke 2014. db_datareader atau db_datawriter atau setara penyangkalan mereka bekerja dengan baik di 2008R2 tetapi tidak bekerja di 2014.

Contoh untuk memberikan izin dalam SQL Server 2014

Jika Anda ingin memberi izin kepada pengguna Alice SELECT, INSERT, UPDATE dan DELETE ke semua objek bernilai tabel dalam skema Penjualan, gunakan yang berikut ini.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: Sales TO Alice; Jika Anda ingin memberikan izin utama Alice SELECT, INSERT, UPDATE dan DELETE ke semua objek bernilai tabel di semua skema, gunakan yang berikut ini.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice; Visibilitas metadata kemudian akan bekerja dengan benar.

Referensi [Greenstone Walker].

Sundeep
sumber
1
Sundeep, tolong coba jelaskan jawaban alih-alih hanya memberikan tautan. Jika Anda butuh bantuan, lihat tur situs
LowlyDBA