快速更新 数据库对象 拥有者
今天恢复数据库的时候,发现有很多procedure的所有者不是dbo,而是一些其他用户,这样造成用户不能访问它。
首先想到的是删除这些procedure然后再重建,发现数量太多不太现实。
突然又想到可以把所有存储过程列出来,然后用procedure sp_changeobjectowner 来更改它。
最后在我们经常用户查数据库表的 sysobjects 表里面,发现dbo的ID都是1,那么可不可以用sql来Update它呢。
抱着试一试的心态,执行了以下sql语名,
update sysobjects
set uid=1
where type='p'
结果出现以下错误:
服务器: 消息 259,级别 16,状态 2,行 1
未启用对系统目录的特殊更新。系统管理员必须重新配置 SQL Server 以允许这种操作。
于是按照提示,打开sql server属性 -> 服务器设置 -> 充许对系统目录进行直接修改
设置如下图:
![](https://www.cnblogs.com/images/cnblogs_com/coolstr/sql_p.gif)
再执行上面的语句,就把所有的procedure的所有者改成了 dbo 了。
首先想到的是删除这些procedure然后再重建,发现数量太多不太现实。
突然又想到可以把所有存储过程列出来,然后用procedure sp_changeobjectowner 来更改它。
最后在我们经常用户查数据库表的 sysobjects 表里面,发现dbo的ID都是1,那么可不可以用sql来Update它呢。
抱着试一试的心态,执行了以下sql语名,
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
结果出现以下错误:
服务器: 消息 259,级别 16,状态 2,行 1
未启用对系统目录的特殊更新。系统管理员必须重新配置 SQL Server 以允许这种操作。
于是按照提示,打开sql server属性 -> 服务器设置 -> 充许对系统目录进行直接修改
设置如下图:
![](https://www.cnblogs.com/images/cnblogs_com/coolstr/sql_p.gif)
再执行上面的语句,就把所有的procedure的所有者改成了 dbo 了。