Ketika melihat properti dari login tertentu, dimungkinkan untuk melihat daftar pengguna yang dipetakan ke login itu:
Saya membuat profil SQL Server Management Studio (SSMS) dan saya melihat SSMS terhubung ke setiap database satu per satu dan mengambil informasi dari sys.database_permissions
Apakah mungkin untuk menulis satu permintaan yang mengambil informasi pemetaan pengguna yang ditunjukkan di atas atau apakah saya dipaksa untuk menggunakan kursor atau sp_MSforeachdb atau sesuatu seperti itu?
sql-server
sql-server-2008
permissions
security
logins
Michael J Swart
sumber
sumber
Jawaban:
Inilah salah satu cara menggunakan SQL dinamis. Tidak ada cara apa pun untuk melakukan ini tanpa iterasi tetapi pendekatan ini jauh lebih aman daripada opsi yang tidak terdokumentasi, tidak didukung dan seperti kereta
sp_MSforeachdb
.Ini akan mendapatkan daftar semua database online, pengguna yang dipetakan (jika ada) bersama dengan nama skema default dan daftar peran yang dipisahkan oleh koma dari siapa mereka berada.
sumber
Script ini sedikit dimodifikasi dari script yang disebutkan di akan melakukan apa yang Anda cari. Ganti 'ThursdayClass' dengan info masuk yang Anda perlukan. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
sumber
Coba sp_dbpermissions . Ini mungkin akan memberi Anda lebih banyak informasi daripada yang Anda butuhkan tetapi itu akan melakukan apa yang Anda inginkan.
Setelah terinstal, jalankan ini.
Peringatan yang adil pada saat itu cocok "seperti" jadi jika login lain mirip dan cocok maka Anda akan melihatnya juga. Misalnya
MyLogin
danMyLoginForThis
keduanya akan cocokMyLogin
. Jika itu masalah, saya memiliki versi yang belum saya rilis di mana Anda dapat mematikannya. Beri tahu saya dan saya dapat mengirimkan email kepada Anda.sumber
Inilah solusi PowerShell:
sumber
Sayangnya Anda harus beralih melalui semua database untuk mendapatkan informasi. Anda ingin bergabung
sys.database_principals
kesys.server_principals
untuk setiap basis data yang cocok dengan SID.Jangan gunakan
sp_msforeachdb
karena diketahui sering melewatkan database.sumber
Saya sedang mencari jawaban yang sama dan menemukan ini: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-allmisi-_2800_2_2900_-aspx/ . Dan ya, itu menggunakan sp_MSforeachDB yang ditakuti, tapi saya pikir orang itu kadang-kadang mendapat rap yang buruk ... ;-)
Saya akan memposting SQL di sini untuk copy-paste mudah (Saya TIDAK mengambil kredit untuk ini, hanya membuatnya mudah diakses!):
sumber
Kueri di bawah ini akan mengembalikan pemetaan untuk DbName yang diminta
Kueri yang Ditingkatkan ada di bawah
sumber
Bagaimana dengan
EXEC master..sp_msloginmappings
?sumber
sp_msloginmappings
tidak berdokumen dan tidak didukung sebelum memposting?