奇怪的问题:具有db_owner角色的登陆用户建立的对象其拥有者默认应该是dbo,但是现在变成了该登陆用户了

mastererp 2005-04-13 02:38:01
SQL Server版本:English Standard Server+SP3
存储过程简介:
在存储过程中创建一个临时表Tmp_Test(不是放在tempdb中的,并且先检查是否存在,存在的话先Drop掉),中间会

取用其中的数据,最后再drop掉它。创建语句如下,名字前面没有owner限定:
create table Tmp_Test(
...
)
错误现象:
以前是正常的,但现在发现,如果用一个具有db_owner角色的登陆用户(但不是sa)登陆来执行此存储过

程,该Create语句创建出来的Table,其拥有者不再是dbo,而是此登陆用户,这样后面用Select ...From Tmp_Test语句的

时候就会报错“Invalid object name 'Tmp_Test'.”,此时用“select * from dbo.sysobjects where (xtype = 'U') and

(name = 'Tmp_Test')”语句查看,其uid字段的值不再是1而是登陆用户对应的uid。
如果我修改存储过程为:create table dbo.Tmp_Test(...),则能正常运行。
测试了4台机器,SQL版本都一致,2台能再现这个问题,2台很正常。
应该是什么环境设置的问题,但是我检查了SQL的版本信息等,都毫无发现。4台机器也实在看不出来在此问题上有什么异同点。
谁能指教一二?
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mastererp 2005-04-13
  • 打赏
  • 举报
回复
Thanks a lot.
netcoder 2005-04-13
  • 打赏
  • 举报
回复
不奇怪,看看联机帮助的说明
-----------------------
数据库所有者 (dbo)
dbo 是具有在数据库中执行所有活动的暗示性权限的用户。将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上。另外,由固定服务器角色 sysadmin 的任何成员创建的任何对象都自动属于 dbo。

例如,如果用户 Andrew 是固定服务器角色 sysadmin 的成员,并创建表 T1,则表 T1 属于 dbo,并以 dbo.T1 而不是 Andrew.T1 进行限定。相反,如果 Andrew 不是固定服务器角色 sysadmin 的成员,而只是固定数据库角色 db_owner 的成员,并创建表 T1,则 T1 属于 Andrew,并限定为 Andrew.T1。该表属于 Andrew,因为该成员没有将表限定为 dbo.T1。

无法删除 dbo 用户,且此用户始终出现在每个数据库中。

只有由 sysadmin 固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner 固定数据库角色成员)创建的对象:

属于创建该对象的用户,而不是 dbo。


用创建该对象的用户名限定。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧