Sybase

在 SYBASE ASE 16 中將登錄名映射到已還原數據庫中的使用者

  • January 9, 2021

從其他環境恢復數據庫後,有一種方法可以將數據庫中的使用者映射到伺服器中的登錄名。我可以刪除並重新創建或別名,但在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

引用自:https://dba.stackexchange.com/questions/282841