สิ่งที่คุณต้องการตรวจสอบว่าเข้าสู่ระบบหรือผู้ใช้? การเข้าสู่ระบบถูกสร้างขึ้นในระดับเซิร์ฟเวอร์และผู้ใช้ถูกสร้างขึ้นที่ระดับฐานข้อมูลดังนั้นการเข้าสู่ระบบจะไม่ซ้ำกันในเซิร์ฟเวอร์
ผู้ใช้ที่ถูกสร้างขึ้นต่อต้านการเข้าสู่ระบบผู้ใช้ที่ไม่มีการเข้าสู่ระบบเป็นผู้ใช้กำพร้าและไม่เป็นประโยชน์เนื่องจากคุณไม่สามารถเข้าสู่ระบบเซิร์ฟเวอร์ sql โดยไม่ต้องเข้าสู่ระบบ
บางทีคุณต้องการสิ่งนี้
ตรวจสอบการเข้าสู่ระบบ
select 'X' from master.dbo.syslogins where loginname=<username>
ข้อความค้นหาข้างต้นจะส่งคืน 'X' หากการเข้าสู่ระบบนั้นมีอยู่จะส่งกลับค่า null
จากนั้นสร้างการเข้าสู่ระบบ
CREATE LOGIN <username> with PASSWORD=<password>
สิ่งนี้สร้างการเข้าสู่ระบบในเซิร์ฟเวอร์ sql แต่จะยอมรับรหัสผ่านที่คาดเดายากเท่านั้น
สร้างผู้ใช้ในแต่ละฐานข้อมูลที่คุณต้องการลงชื่อเข้าใช้
CREATE USER <username> for login <username>
กำหนดสิทธิ์ดำเนินการให้กับผู้ใช้
GRANT EXECUTE TO <username>
คุณต้องมีสิทธิ์ SYSADMIN หรือพูดสั้น ๆ ว่า "sa"
คุณสามารถเขียนขั้นตอน sql สำหรับที่บนฐานข้อมูล
create proc createuser
(
@username varchar(50),
@password varchar(50)
)
as
begin
if not exists(select 'X' from master.dbo.syslogins where loginname=@username)
begin
if not exists(select 'X' from sysusers where name=@username)
begin
exec('CREATE LOGIN '+@username+' WITH PASSWORD='''+@password+'''')
exec('CREATE USER '+@username+' FOR LOGIN '+@username)
exec('GRANT EXECUTE TO '+@username)
end
end
end