Saya bekerja dengan SQL Server 2012. Saya ingin memeriksa apakah ada pengguna sebelum menambahkannya ke database.
Inilah yang telah saya uji:
USE [MyDatabase]
GO
IF NOT EXISTS (SELECT name
FROM [sys].[server_principals]
WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
CREATE USER [IIS APPPOOL\MyWebApi AppPool]
FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Namun, kode SELECT name FROM [sys].[server_principals]
ini tidak kembali jika pengguna itu ada di MyDatabase
.
Bagaimana saya bisa mengecek jika ada pengguna MyDatabase
?
sql-server
sql-server-2012
VansFannel
sumber
sumber
Jawaban:
Gunakan
sys.database_principals
sebagai gantisys.server_principals
.Jadi kueri akhir akan terlihat seperti ini (akuntansi untuk filter pengguna):
sumber
Saya menggunakan SUSER_ID () dan USER_ID () untuk hal-hal seperti ini:
sumber
Penyempurnaan lebih lanjut karena ini akan membuat pembacaan yang lebih optimal
sumber
Jika Anda menggunakan server yang ditolak Anda dapat memeriksa banyak server sekaligus dan mengembalikan true / false dengan:
sumber
database_principals
alih-alihserver_principals
- periksa pertanyaan - ini tentang pengguna di tingkat basis data .