SQL Server中修改数据库所有者的2种方法
SQL Server中修改数据库所有者的2种方法
在MS SQL SERVER中,我们有时候会碰到下面这种数据库,所有者是登录数据库的用户,如下图,但我们却没有办法直接在数据库管理工具中直接修改数据库所有者。这样会给我们后继的一些操作带来不便,至少对MitchellChu我来说是非常不便的,因为我后继想对登录用户的权限做些限制,因此需要寻求数据库所有者的修改办法。
修改数据库所有者的方法有两种:一种老方法,一种新方法 ——当然,都是在SQL语句中操作完成,我还没有发现可以直接在UI中操作的,如果有请告诉我。:P
1. 在以前数据库修改的办法是使用sp_changedbowner来进行的,如下方法:
1
2
3
4
5
|
USE UserTest GO EXEC sp_changedbowner 'username' GO |
该方法直接将数据库的所有者改变成username,当然,更详细的说明请参照SQL帮助。
但是该方法将在后继的新版本被删除,也就是说,在新版本出来(2012)之后,这个修改方法将不能使用。微软的官方是这么说的:
那么要改变数据库的所有者使用什么方式呢?
2. 早在SQL Server 2005的时候,MS SQL Server就已经提供了一个新的方法来修改数据库所有者:ALTER AUTHORIZATION
新的方法可以更改安全对象的所有权,这里的安全对象不仅限于数据库所有者一项,还有很多。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*使用方法*/ ALTER AUTHORIZATION ON [ <entity_type> :: ] entity_name TO { SCHEMA OWNER | principal_name } <entity_type> ::= { Object | Type | XML Schema Collection | Fulltext Catalog | Schema | Assembly | Role | Message Type | Contract | Service | Remote Service Binding | Route | Symmetric Key | Endpoint | Certificate | Database } /* <entity_type> :: 更改其所有者的实体的类。Object 是默认值。 entity_name 实体名。 principal_name 将拥有实体的主体名称。 ALTER AUTHORIZATION 可用于更改任何具有所有者的实体的所有权。数据库包含的实体的所有权,可以传递给任何数据库级的主体。服务器级实体的所有权只能传递给服务器级主体。 */ |
比如在这里,我们需要修改所有者,那么我们用下面代码即可完成:
1
2
3
4
5
6
|
ALTER AUTHORIZATION ON DATABASE ::DatabaseName TO UserName GO /* DatabaseName就是数据库名称 UserName是用户名称 */ |
使用新的方式,我们无需Use 数据库名称,在使用上比sp_changedbowner更方便些。
转载于Mitchell Chu's Blog,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?