Skip to content
No results
  • About Me (Resume)
  • Meetup Note/Share
  • เงินทอง งอกเงย
naiwaen@DebuggingSoft วงแหวนเว็บ
  • About Me (Resume)
  • Meetup Note/Share
  • เงินทอง งอกเงย
naiwaen@DebuggingSoft วงแหวนเว็บ

[MSSQL] ตัวอย่าง Script ที่ช่วยในการสร้าง User หลัง Restore Database

  • AdminpingAdminping
  • August 11, 2017
  • MS SQL Server

Blog เขียนมา เพราะ หลังจากได้รับไม้ต่อ ให้มาดูเคสนึงครับ ซึ่งถ้าขึ้นไม่ได้เนี่ย ลูกค้าขอเลื่อนการจ่ายเงินออกไปอีกครับ โดยตอนแรกปัญหาที่ได้รับมาจากทีม CS คือ

  • โปรแกรม Connector และ Excel-AddIns ใช้ไม่ได้เลยยย

พอเข้าไปผมเข้าไปเปิด Log4Net เป็นดูรายละเอียด Error ก็เจอว่า

เนื่องจากทาง CS ไม่สามารถแจ้งได้ว่า ตอนลงระบบเนี่ย เค้ามีขั้นตอนอย่างไร ทำให้การหาสาเหตุของปัญหายากมากครับ ผมเลยเสียเวลาไปกับการหาปัญหาของตัว Connector และ Excel-AddIns นานเลยครับ จนสุดท้ายลองเอา Tools ที่เคยทำมาทดสอบปรากฏว่าเป็นปัญหาที่ Database ครับ ไม่รู้ว่าใคร Restore ผิด?

  • Set User DB ให้เป็น db_denydatawriter - User DB เขียนลง Table ไม่ได้
  • ลืม Set User DB ให้เป็น db_owner ไม่เห็น Table เลย และปัญหาจุกจิอื่นๆครับ

สุดท้ายผม มา Refactor Script เพื่อจัดการกับสิทธิ์ครับ โดย Script นี้ผมลองทำขึ้นมาในช่วงปี 2012 เพราะ ขั้นตอนทำมือ โคตรเยอะ แล้วมี Refactor ตอนปี 2018 เลยมาก็แปะลง Blog เนี่ยแหละ เผื่อคนอื่นลองนำไปศึกษาครับ ผมใช้

  • สิทธิ Windows Authentication ในการ Run ครับ
  • Script ด้านล่างนี้ สร้าง และทดสอบบน MSSQL Server 2005 / 2008
--ตรวจสอบ User ก่อนว่า Instane มี User นี้ หรือป่าว ? ถ้าไม่ก็สร้าง
IF  NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'invest')
                CREATE LOGIN [invest] WITH PASSWORD = 0x0100E1BCBAF63A22EDDC4FCEE2551E32A45C51363F0A9AD4D95F HASHED, SID = 0x1B16028920ADF147BA9744E7CAE21EBF, DEFAULT_DATABASE = [master], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
GO
IF  NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'bonanza')
                CREATE LOGIN [bonanza] WITH PASSWORD = 0x01004D0ACBE8F6923518FBFCE9832985129E2ECB2A2B23DA99C3 HASHED, SID = 0x5AAEDC9C5626F345AD2052EE739879FE, DEFAULT_DATABASE = [master], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
GO
--////////////////////////////////////////////////////////
--จัดการ user ของ DB
--เอาสิทธิ์การเป็นเจ้าของ Schema INVEST ไปให้ dbo ก่อนเพื่อป้องกันปัญหาลบ User ไม่ได้ เพราะเป็นเจ้าของ Schema
ALTER AUTHORIZATION ON SCHEMA::INVEST TO dbo;
ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo;
--ลบ User ของ DB
DROP USER [invest];
DROP USER [bonanza];
--สร้าง User ใหม่
CREATE USER bonanza FOR LOGIN bonanza WITH DEFAULT_SCHEMA = INVEST;
CREATE USER invest FOR LOGIN invest WITH DEFAULT_SCHEMA = INVEST;
Go
--ใส่ Role ให้เป็น DB OWNER
EXEC sp_addrolemember 'db_owner', 'bonanza'
Go
EXEC sp_addrolemember 'db_owner', 'invest'
Go
--คืนสิทธิ์ให้เจ้าของ Schema Invest กลับไปให้ user invest
ALTER AUTHORIZATION ON SCHEMA::INVEST TO invest;

Reference

  • CREATE LOGIN (Transact-SQL) - SQL Server | Microsoft Docs

Like this:

Like Loading…

Related

Tags
# Permission# role member# Script Create Login# MSSQL# Authorization# Restore

About me

Adminping

Adminping

My name is Chatri Ngambenchawong and I am a Software Developer, Blogger, Geek and FoodMania ^__^

View Full Profile →

Donate (ร่วมสนับสนุน)

Facebook Page

Facebook Page

Categories

Archives

Pages

  • About Me (Resume)
  • Meetup Note/Share
  • นโยบายการใช้คุกกี้ (Cookies Policy)
  • นโยบายความเป็นส่วนตัวของข้อมูล (Privacy Policy)
  • เงินทอง งอกเงย

Recent Posts

  • Fixed .NET WEBAPI Error 524 + 403 When Call Local LLM Server behind Cloudflare Tunnel
  • จดๆ จาก LINE Thailand Developer Conference 2026
  • Refactor Jenkins User Defined Global Properties
  • Sleep Test ครั้งแรกที่โรงพยาบาลตากสิน
  • จดๆจาก Claude Thailand Community Meetup 3: Real Business Use Case

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Related Posts

DB2 Data Type DECFLOAT แล้ว SQL Server ใช้อะไร ?

  • November 3, 2023

[MSSQL] สรุปงาน SQL Server Community Thailand Meeting #16

  • July 20, 2022

[MSSQL] สรุปงาน SQL Server Community Thailand Meeting #14

  • November 20, 2021

ถ้าสนใจ Blog สรุปต่างๆ ลองมา Subscribe กันได้ครับ เดี๋ยวจะมีเมล์จาก [email protected] มาให้กด Confirm อีกทีครับ

  • About Me (Resume)
  • นโยบายการใช้คุกกี้ (Cookies Policy)
Copyright © 2026 - WordPress Theme by CreativeThemes

%d