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

posted on 2012-07-09 18:36  蹲在路边写代码  阅读(5533)  评论(0编辑  收藏  举报

导航