星期五, 10月 11, 2013

[SQL] 利用 sqlcmd 建立 Login

在測試環境練習時,一時手殘竟然把唯一的 Login 給刪除掉,再加上 sa 根本就沒有開啟,導致完全無法進入和操作 SQL Server 的窘境。

模擬錯誤發生
  • 刪除唯一的 Login Win2008R2\Administrator
[SQL] 利用 sqlcmd 建立 Login-1
  • 利用 SSMS 嘗試登錄 SQL Server
[SQL] 利用 sqlcmd 建立 Login-2
  • 無法登錄
[SQL] 利用 sqlcmd 建立 Login-3

解決步驟
  • Step1:利用系統管理員權限開啟[命令提示字元]
假如 Windows 登錄帳戶沒有足夠權限,可能無法進行之後要停止、啟動 SQL Server 的動作,因此一定要利用系統管理員身分執行
[SQL] 利用 sqlcmd 建立 Login-4
  • Step2:開啟[單一使用者模式]
[單一使用者模式]下啟動 SQL Server 可讓電腦本機管理員群組的任何成員以 sysadmin 固定伺服器角色的成員身分,連接到 SQL Server instance。

利用 net stop 語法停止 SQL Server
net stop MSSQL$SQL2012
[SQL] 利用 sqlcmd 建立 Login-5
再利用 net start 搭配 m 啟動參數來開啟[單一使用者模式]
net start MSSQL$SQL2012 /m
[SQL] 利用 sqlcmd 建立 Login-6
利用 net stop (start) 有下列兩點需要注意
  1. 預設執行個體 => net stop MSSQLServer
  2. 指定執行個體 => net start MSSQL$InstanceName
  • Step3:進入 sqlcmd 內使用 T-SQL 語法建立 Login 並設定所屬角色
sqlcmd 公用程式是命令列公用程式,可用來執行 T-SQL 語法
sqlcmd -S Win2008R2\SQL2012 -E
參數說明
  1. -S:指定要連接的 SQL Server instance
  2. -E:使用信任連接登入 SQL Server,而不用使用者名稱和密碼
[單一使用者模式]顧名思義只能有一條連線進入 SQL Server,有其他連線已經連進的話,會導致 sqlcmd 登錄失敗。

[SQL] 利用 sqlcmd 建立 Login-7
Report Service 佔據唯一的一條連線,先停止 Report Service 後就可以登錄啦
[SQL] 利用 sqlcmd 建立 Login-8
登錄 sqlcmd 後輸入 T-SQL 語法建立 Login 並設定該 Login 屬於 sysadmin 伺服器角色
CREATE LOGIN [Win2008R2\Administrator] FROM Windows
go
ALTER SERVER ROLE sysadmin ADD MEMBER [Win2008R2\Administrator]
go 
[SQL] 利用 sqlcmd 建立 Login-9
* Windows 帳號  [Win2008R2\Administrato]  的前後一定要用括號前後包起來

再重新停止並開啟 SQL Server 就可以正常操作 SQL Server 囉
[SQL] 利用 sqlcmd 建立 Login-10

其他案例
  • 安裝時未把 Windows Administrator 加入 SQL Server sysadmin
SQL Server 2008 開始,安裝過程中必須手動把 Windows Administrator 加入 SQL Server sysadmin 中,SQL Server 2005(含)之前版本,則是會自動加入;同事在 Win7 上安裝 SQL Server 2012 Express 時,在安裝過程中並沒有把 Windows Administrator 加入 SQL Server sysadmin 導致安裝完成後,無法登錄 SQL Server,利用此方法來解決
  • 20230710
[筆記] MS SQL Server SA被鎖定 該筆記是 sa 被鎖定
  • 20230713

沒有留言:

張貼留言