Sybase
在 SYBASE ASE 16 中將登錄名映射到已還原數據庫中的使用者
從其他環境恢復數據庫後,有一種方法可以將數據庫中的使用者映射到伺服器中的登錄名。我可以刪除並重新創建或別名,但在MS SQL Server中有一種方法:
EXEC sp_change_users_login 'Auto_Fix', 'user'
我在SYBASE ASE 16中尋找類似的東西
Sybase (ASE) 不提供在使用者數據庫和主數據庫之間同步系統表的任何方法。在從不同的數據伺服器載入數據庫(或在本地數據伺服器的登錄名/角色/使用者/別名已(大量)修改後載入舊的數據庫轉儲)後,由 DBA/dbo 手動修復此問題。
您需要考慮幾個問題:
- 使用者映射到錯誤的登錄名(需要重新映射
suid
)- 沒有登錄的使用者映射到(需要刪除)
- (db) 角色映射到錯誤的 (srvr) 角色(需要重新映射
id
)- (db) 沒有要映射到 (srvr) 角色的角色(需要刪除)
- 映射到錯誤登錄名的別名(更容易刪除和重新執行
sp_addalias
)- 沒有登錄名的別名映射到(需要刪除)
- 沒有關聯的被授予者/授予者的權限(在清理 sysusers/sysalternates/sysroles 之後)
假設您正在尋找有關如何進行修補的輸入/建議
sysusers
…不要在沒有先執行這些操作:
- 在測試數據庫中測試/驗證
- 確保所有更改都在 a 內執行,
transaction
並且在發布 a 之前對所述更改進行了雙重檢查/驗證commit tran
任何進行以下步驟的人應對任何不良後果負全部責任!!
注意:
sysusers
包含有關使用者、組和角色的數據;以下適用於使用者的條目。假設:
- db 使用者名與關聯的登錄名相同(即,
sysusers.name
應該匹配syslogins.name
)- 如果登錄名已映射到具有不同名稱的使用者(故意)……以下將不起作用;DBA 需要有一個主列表,列出應該將哪些登錄名映射到哪些使用者
修補使用者條目涉及的一般步驟
sysusers
:-- mismatched sysusers entries select suid,suser_name(suid),name from sysusers where suid > 1 and isnull(suser_name(suid),'DOESNOTEXIST') != name and name not in ('dbo','guest','probe','usedb_user') # operator should review and update this list as necessary go -- assuming sysusers needs to be patched ... -- enable updates of system tables exec sp_configure 'allow updates to system tables',1 go -- perform all updates inside a transaction !!! begin tran go -- update sysusers based on sysusers.name = syslogins.name update sysusers set suid = suser_id(name) where suid > 1 and name not in ('dbo','guest','probe','usedb_user') and suser_id(name) != suid and suser_id(name) is not NULL go -- delete sysusers where there is no syslogins.name = sysusers.name delete sysusers where suid > 1 and name not in ('dbo','guest','probe','usedb_user') and suser_id(name) is NULL /* if any errors, or rowcounts are greater than expected: rollback tran else commit tran */ -- disable updates of system tables exec sp_configure 'allow updates to system tables',0 go