Sql-Server
無法將成員資格授予公共角色
我正在嘗試使用來自 prod 的快照刷新我的開發數據庫。我已將生產數據庫從 prod 伺服器恢復到我的開發伺服器,名為 development。我正在嘗試向網站使用的使用者登錄授予對開發數據庫的訪問權限。但是當我嘗試執行時
ALTER ROLE [public] ADD MEMBER [mywebuser]
,我得到了錯誤Msg 15081, Level 16, State 1, Line 16 Membership of the public role cannot be changed.
回想起來,我相信當我
CREATE USER [mywebuser] FOR LOGIN [mywebuser]
在那個數據庫上執行時,我認為它說它已經存在了。所以我只是繼續授予訪問權限。prod 伺服器上有一個使用者和登錄名相同。有沒有可能被名字弄糊塗了?如果是這樣,我該如何檢查它?我的開發伺服器正在 Windows Server 2019 Datacenter 10.0 (X64) 上執行 Microsoft SQL Server 2019 (RTM-GDR) (KB4583458) - 15.0.2080.9 (X64) Developer Edition
我的 Prod 伺服器在 Windows Server 2019 Datacenter 10.0 (X64) 上執行 Microsoft SQL Server Web(64 位)15.0.2080.9
我能夠通過首先從數據庫中刪除使用者然後重新創建它來使其工作。就我而言,此登錄名已在其他數據庫中使用,因此我無法刪除登錄名。並且刪除使用者並沒有立即起作用,因為它還擁有一些架構。
首先,我必須找到它擁有的架構:
use [development] go --- See which schemas the user owns: SELECT S.*, [SchemaOwnwer]=dp.name, dp.type_desc FROM SYS.schemas S INNER JOIN SYS.database_principals dp ON S.principal_id = dp.principal_id
它表明使用者擁有 2 個模式,所以接下來我將它們重新分配給 dbo:
-- change them so that dbo owns them: alter authorization on schema::HangFire to dbo; go alter authorization on schema::db_owner to dbo; go
我還必須從幾個角色中刪除使用者:
exec sp_droprolemember 'db_owner', 'mywebuser'; go exec sp_droprolemember 'db_datareader', 'mywebuser'; go exec sp_droprolemember 'db_datawriter', 'mywebuser'; go
最後,我可以刪除使用者
drop user [mywebuser]
現在,最後,我可以使用適當的設置將其添加回來:
create user [mywebuser] for login [mywebuser]; go exec sp_addrolemember 'db_owner', [mywebuser]; go exec sp_addrolemember 'db_datareader', [mywebuser]; go exec sp_addrolemember 'db_datawriter', [mywebuser]; go ALTER USER [mywebuser] WITH DEFAULT_SCHEMA=[dbo]; go ALTER ROLE [db_owner] ADD MEMBER [mywebuser]; go grant connect to [mywebuser]; go