Saya memiliki pengguna server sql yang memiliki kemampuan untuk menjatuhkan basis data apa pun. Saya telah menjalankan kode di bawah ini untuk memeriksa hak-hak yang dimiliki pengguna dalam SQL Server tetapi belum dapat mengidentifikasi bagaimana pengguna memiliki kemampuan untuk menjatuhkan basis data. Apakah ada skrip sql yang dapat membantu saya mengidentifikasi bagaimana pengguna ini dapat menjatuhkan dbs? Apakah ada perintah untuk menolak mereka menjatuhkan basis data? (SSMS tidak menunjukkan pengguna sebagai bagian dari peran dbcreator)
select USER_NAME(p.grantee_principal_id) AS principal_name,
dp.type_desc AS principal_type_desc,
p.class_desc,
OBJECT_NAME(p.major_id) AS object_name,
p.permission_name,
p.state_desc AS permission_state_desc
from sys.database_permissions p
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
order by principal_name
Output dari kueri di atas memberikan tiga catatan berikut untuk pengguna jika itu membantu
class_desc object_name permit_name permit_state_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE GRANT
sumber
Jawaban:
Kueri yang Anda punya di sana hanya akan mencantumkan izin untuk basis data tempat Anda menjalankannya. Salah satu cara untuk mendapatkan izin untuk menjatuhkan database adalah ALTER ANY DATABASE, yang merupakan izin tingkat server. Untuk memeriksanya, coba kueri ini:
Dengan kata lain, pengguna mungkin mendapatkan izin untuk menjatuhkan basis data di tingkat masuk server daripada tingkat pengguna basis data.
sumber
Saya sarankan menjalankan kueri ini pada master
Ini akan memberi Anda ide yang cukup bagus tentang peran yang memiliki akses ke database master Anda dan melihat cuaca atau tidaknya pengguna memiliki peran tersebut. Anda juga dapat menjalankan ini terhadap database Anda yang lain untuk memeriksa izin pengguna pada basis data berdasarkan tingkat basis data. Ini harus menjadi alat penting untuk membantu melacak ini.
sumber
Saya telah menggunakan ini beberapa kali dengan beberapa hasil yang baik, sumber kode di bawah ini dapat ditemukan di sini :
Pergi dokumentasi di sini , persyaratan keamanan bagi pengguna untuk menjatuhkan database dinyatakan sebagai:
Anda dapat secara eksplisit menolak izin untuk yang disebutkan di atas, tetapi memahami bahwa tingkat penolakan Anda mungkin tidak mempengaruhi seperti yang Anda pikirkan. Saya ingat membaca kertas putih yang membahas bagaimana SQL Server tentang memvalidasi izin pengguna pada saat koneksi tetapi tidak dapat menemukannya sekarang. Jika saya ingat saya mungkin menolak koneksi mereka ke database tetapi kenyataannya pengguna adalah bagian dari
sysadmin
peran yang diutamakan.Saya akan melihat audit khusus untuk
DROP DATABASE
perintah agar aman.sumber