Saya mencari cara terbaik untuk menonaktifkan akses ke sys.tables
/ Information Schema
untuk pengguna / grup di SQL Server.
Saya menemukan utas ini sejak 2008
Ini menunjukkan cara bagaimana menolak akses [sys].[something]
seperti:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Tetapi tidak ada cara bagaimana menonaktifkan akses pada Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Ini sepertinya tidak berhasil.
Bagaimana saya bisa menonaktifkan akses ke information_schema?
Dan apakah ada yang lebih mudah cara menonaktifkan akses ke semua sys
/ information_schema
?
Pembaruan: Sebenarnya saya tidak dapat menjalankan kedua pernyataan berikut:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Saya mencoba menjalankannya pada DB spesifik di mana Pengguna ada, dan saya juga mencoba pada "master".
Saya masih bisa lari:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> masih mengembalikan hasil
SELECT * from
sys.TABLES
-> tidak ada hasil lagi
Termasuk SCHEMA::
dalam kueri memungkinkan untuk membuat yang dapat diamankan
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Tapi sekarang saya masih bisa memilih semua informasi dari DB.
Saya telah melihat "Securables" -Tab di jendela Properti pengguna di Management Studio 2008, tampilannya seperti ini:
Entri yang tidak memblokir pemilihan sys.tables
Skema: sys, Nama: tabel, Jenis: Tampilan
Izin untuk sys.tables: Izin: Pilih, Pemberi: dbo, Deny diperiksa
Entri yang tidak memblokir seleksi apa pun
Skema :, Nama: INFORMATION_SCHEMA, Jenis: Skema
Izin untuk INFORMATION_SCHEMA: Izin: Pilih, Pemberi: dbo, Deny TIDAK dicentang (saya mencoba memeriksanya, tetapi tidak ada kesempatan ..)
Izin: Pilih, Pemberi: INFORMATION_SCHEMA, Tolak diperiksa
Saya mencoba untuk mengatur izin di atas GUI, tetapi kemudian saya mendapatkan kesalahan yang sama bahwa pengaturan izin hanya mungkin pada DB master. Tapi saya tidak memiliki pengguna / login ditambahkan ke keamanan master DB.
Larutan:
Satu-satunya cara saya bisa membuat deny
pekerjaan untuk information_schema
adalah menambahkan pengguna ke master-db dan menjalankannya deny select
di master:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
Dan seperti dalam kode ini, itu hanya dapat dieksekusi untuk tabel tunggal.