Saya perlu memeriksa apakah login tertentu sudah ada di SQL Server, dan jika tidak, maka saya perlu menambahkannya.
Saya telah menemukan kode berikut untuk benar-benar menambahkan login ke database, tetapi saya ingin membungkus ini dalam pernyataan IF (entah bagaimana) untuk memeriksa apakah login tersebut ada terlebih dahulu.
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword',
DEFAULT_LANGUAGE=[us_english],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
Saya mengerti bahwa saya perlu menginterogasi database sistem, tetapi tidak yakin harus mulai dari mana!
sql-server
login
Brett Rigby
sumber
sumber
Jawaban:
Dari sini
sumber
x] with password ''y'';\r\ndrop table foo;\r\n
CREATE LOGIN [@loginName] FROM ...
? Maafkan ketidaktahuan saya, saya ingin belajar ...QUOTENAME()
berkeliling@loginName
, bukan seluruh pernyataan, dan kemudian Anda dapat menyingkirkan manual [dan] pembatas di sekitar@loginName
.Berikut adalah cara untuk melakukan ini di SQL Server 2005 dan yang lebih baru tanpa menggunakan tampilan syslogins yang sudah usang:
Tampilan server_principals digunakan alih-alih sql_logins karena yang terakhir tidak mencantumkan login Windows.
Jika Anda perlu memeriksa keberadaan pengguna dalam database tertentu sebelum membuatnya, maka Anda dapat melakukan ini:
sumber
Sebagai tambahan kecil untuk utas ini, secara umum Anda ingin menghindari menggunakan tampilan yang dimulai dengan sys.sys * karena Microsoft hanya menyertakannya untuk kompatibilitas mundur. Untuk kode Anda, Anda mungkin harus menggunakan sys.server_principals. Ini dengan asumsi Anda menggunakan SQL 2005 atau lebih besar.
sumber
Anda dapat menggunakan fungsi bawaan:
melalui
Suka:
https://technet.microsoft.com/en-us/library/ms176042(v=sql.110).aspx
sumber
Coba ini (ganti 'pengguna' dengan nama login yang sebenarnya):
sumber
Ini berfungsi pada SQL Server 2000.
pada SQL 2005, ubah baris ke-2 menjadi
Saya tidak yakin tentang SQL 2008, tapi saya menduga itu akan sama dengan SQL 2005 dan jika tidak, ini akan memberi Anda gambaran tentang di mana mulai mencari.
sumber
apa yang sebenarnya ingin Anda periksa login atau pengguna? login dibuat di level server dan pengguna dibuat di level database sehingga login unik di server
juga pengguna dibuat terhadap login, pengguna tanpa login adalah pengguna yatim dan tidak berguna karena Anda tidak dapat melakukan login server sql tanpa login
mungkin kamu membutuhkan ini
periksa login
kueri di atas mengembalikan 'X' jika login ada lagi mengembalikan nol
lalu buat login
ini menciptakan login di sql server. tetapi hanya menerima kata sandi yang kuat
buat pengguna di setiap basis data yang Anda inginkan untuk login
memberikan hak eksekusi kepada pengguna
ANDA HARUS MEMILIKI izin SYSADMIN atau mengatakan 'sa' singkatnya
Anda dapat menulis prosedur sql untuk itu di database
sumber
Untuk menangani konflik penamaan antara login, peran, pengguna dll. Anda harus memeriksa
type
kolom sesuai dengan dokumentasi Microsoft sys.database_principalsUntuk menangani karakter khusus dalam nama pengguna dll, gunakan
N'<name>'
dan[<name>]
sesuai.Buat login
Buat pengguna basis data
Buat peran basis data
Tambahkan pengguna ke peran
Berikan hak untuk peran
sumber
Ini untuk Azure SQL:
Sumber: Cara memeriksa apakah pengguna basis data sudah ada di Azure SQL Database
sumber
Pertama, Anda harus memeriksa keberadaan login menggunakan tampilan syslogins:
Maka Anda harus memeriksa keberadaan basis data Anda:
sumber