在唯讀庫中解決孤立使用者

2021-08-29 04:35:03 字數 1458 閱讀 7874

如果在alwayson集群中出現這樣的問題:

1.同乙個使用者名稱,可以登入主節點查詢某個庫,在從節點卻無相關查詢許可權,連線從節點中的某個資料庫即報錯。但是在該報錯資料庫中能查詢到當前使用者的許可權足夠

2.資料庫遷移後,原正常工作的dblink無法正常工作,確認密碼許可權等未作變動,且在目標資料庫中能查詢到當前使用者資訊,而且許可權足夠

…遇到上述問題,我們首先應該想到的就是孤立使用者問題。

因為主節點是可以正常查詢的,所以孤立使用者是出現在從節點的。

我們執行一下語句可以查詢到從庫上的孤立使用者

--檢查資料庫中孤立使用者

exec sp_change_users_login @action='report'

查詢到孤立使用者後,我們執行下列語句來進行關聯孤立使用者

exec sp_change_users_login   

@action='update_one',

@usernamepattern='test_ro', --資料庫孤立使用者

@loginname='test_ro'; --關聯到sql server登入名

唯讀庫不允許除查詢以外的其他操作,所以正常情況下,只能在主庫做關聯登入名操作,然後由資料庫將此操作同步至從庫。

想到在主節點進行關聯使用者名稱操作,該操作會被同步至從節點,一樣可以關聯。於是在主節點執行相關查詢,再到從節點查詢,發現該孤立使用者仍存在。

執行了關聯操作,該登入名卻未被關聯,此時就猜測該登入名可能有問題。

仔細對比主庫與從庫該登入名資訊,發現兩個登入名的sid不一樣,就猜測可能由這個不一致引起的。事實說明,一般這種情況都是由sid不一致引起的。

若發現sid不一致,則需要刪除從庫的登入名,使用主庫登入名對應的sid重新建立後,在主庫執行關聯登入名操作。

--主庫執行,查詢sid

select * from sys.sql_logins

--從庫執行

--刪除登入名

drop login test_ro

--建立相同sid的登入名

create login [test_ro] with password=n'123456',

sid = 0x3528851918ad98438d05c47644d4a21b ,

-- sid 與主副本庫上對應的登入名的sid相同

default_database=[master]

--建立成功後再執行一次關聯使用者名稱操作

exec sp_change_users_login

@action='update_one',

@usernamepattern='test_ro', --資料庫孤立使用者

@loginname='test_ro'; --關聯到sql server登入名

此時再查詢資料庫,會發現該孤立使用者消失,該使用者在從節點已可以正常查詢。

mysql孤立鎖 SQL孤立使用者解決方案

中國最大的web開發資源 及技術社群,prb 聯機叢書中的 孤立使用者疑難解答 主題不完整 文章 id 274188 最後更新日期 2004年5月31日 版本 1.0 本頁內容 症狀狀態 更多資訊 參考症狀 當您將資料庫備份恢復到另一台伺服器時,可能會遇到孤立使用者的問題。sql server 聯機...

Sql Server 孤立使用者解決辦法

sql server 孤立使用者 是我們經常遇到的事情,今天詳細的梳理了下,希望能幫到你 當把使用者資料庫從一台 sql server 使用備份和恢復的方式遷移到另一台伺服器。資料庫恢復以後,原先使用者定義的一些其他資料庫使用者,就無法在新伺服器上繼續使用了。尤其對一些sql ser 帳號,這些就是...

sql孤立使用者解決方法

如圖,無登入名,所屬為孤立帳戶 其表現可以為 同名在安全性中存在,但是沒存在對某庫的訪問許可權 訪庫安全性中有使用者名稱,為上圖所示。孤立帳戶,就是某個資料庫的帳戶只有使用者名稱而沒有登入名,這樣的使用者在使用者庫的sysusers系統表中存在,而在master資料庫的syslogins中卻沒有對應...