เมื่อวันก่อนได้งานจากหัวหน้าให้เขียน Script เพื่อจัดการ User กับสิทธิื หลังการ Restore ฐานข้อมูล เมื่อลองเขียนคำสั่งเพื่อ Drop User
DROP USER [invest];
พบ Error Message ดังนี้
จาก Error Message ด้านบน สามารถสรุปสาเหตุของปัญหานั้น เกิดจาก User ที่เราต้องการจะ Drop นั้นเป็นเจ้าของ Schema ของฐานข้อมูลนี้ โดยเราสามารถตรวจสอบ Schema ที่ User นั้นๆจัดการอยู่ จากคำสั่ง SQL ดังนี้
SELECT s.name FROM sys.schemas s WHERE s.principal_id = USER_ID('invest');
หมายเหตุ: sys.schemas มองง่ายเลย คือ กระดาษ Note ที่เก็บข้อมูล Schema ของฐานข้อมูลนั่นเอง
จากข้อมูลข้างต้นได้แสดงให้เห็นว่า User invest เป็นเจ้าของ Schema INVEST อยู่ เราจึงไม่สามารถ Drop User ได้ เราจึงจำเป็นต้องโอนสิทธิ์การดูแล Schema INVEST ไปให้ User อื่น เช่น dbo ตามคำสั่ง ดังนี้
ALTER AUTHORIZATION ON SCHEMA::INVEST TO dbo;
ทดสอบ SELECT Schema ที่ User ดูแลด้วยคำสั่ง ดังนี้
SELECT s.name FROM sys.schemas s WHERE s.principal_id = USER_ID('invest');
ทดสอบ Drop user อีกครั้งพบว่าสามารถทำได้ ดังรูป
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.