SQL Server 2005 無法刪除用戶的解決方法


一個數據庫,運行在SQL Server 2005下,數據庫用戶無法刪除,在刪除時提示“數據庫主體在該數據庫中擁有架構,無法刪除”。

 原因很簡單,就是由於此用戶在數據庫中擁有某些架構的所有權,將相關架構的用戶權限移除或刪除架構即可。 

    此處以一個用戶nsm為例,說明具體應進行的操作,注意以下方面:
附加好了 數據庫:
1:數據庫cdb --》在“安全性”-“角色”-“數據庫角色”下,刪除nsm用戶。
2:數據庫cdb --》在“安全性”-“用戶--》刪除nsm用戶
    做完這幾步,基本沒有其它問題了,能夠順利地刪除無效的數據庫用戶。
3、 安全性 --->登陸名---?新建用戶 就好了

 

先刪除此用戶對應的架構,然后在刪除對應的用戶
步驟
1、SQL SERVER MANAGEMENT STUDIO--》數據庫--》安全性--》構架,先刪除對應的構架
2、SQL SERVER MANAGEMENT STUDIO--》數據庫--》安全性--》用戶,刪除對應的用戶
有時候這樣並不能解決問題,因為此操作的第一步就實現不了,無法刪除那個用戶所有的架構。

--執行如下SQL語句
Alter   AUTHORIZATION   ON   SCHEMA::db_owner   TO   dbo; 
--然后手動刪除就可以了。

 

另附:批量修改表架構

SQL 2005 如何批量修改表和存儲過程的架構
首先需要在要修改的庫的安全選擇中對其中的架構項添加一個新的架構所有者
1。先說說如何在SQL 2005中批量修改存儲過程的架構
執行以下SQL,將執行結果拷貝出來,批量執行既可。
SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + p.Name 
FROM sys.Procedures p INNER JOIN sys.Schemas s on p.schema_id = s.schema_id 
WHERE s.Name = '舊的架構名稱'

2。再說說如何在SQL 2005中批量修改表的架構
執行以下SQL,將執行結果拷貝出來,批量執行既可。
declare @name sysname
declare csr1 cursor
for 
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
open csr1
FETCH NEXT FROM csr1 INTO @name
while (@@FETCH_STATUS=0)
BEGIN
SET @name='舊的架構名稱.' + @name
print 'ALTER SCHEMA dbo(新的架構名稱) TRANSFER ' + @name
fetch next from csr1 into @name
END
CLOSE csr1
DEALLOCATE csr1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM