关于数据库对象所有者非dbo时的可能造成的问题及解决方法
来源:互联网 发布:华凯网络 编辑:程序博客网 时间:2024/05/16 15:35
数据库对象:表,视图,存储过程等
症 状:当一个非sysadmin 固定服务器角色成员(非DBA用户),在查询分析器或程序中(asp,vb等),新建一个数据库对象时,数据库对象的所有者为当前的登录的用户。如果程序下一次更改为以DBA身份或者其它身份运行时,就会提示找不到该数据库对象。
原 因:如果当前用户不是所有者,则当前用户使用过程时必须指定所有者名称,如果当前用户或 dbo 拥有该对象,则不需要所有者名称
解决方案:
1.
采用指定拥有者的对象 eg: EXECUTE user1.proc1
2.
更改数据库对象的所有者
命令:EXEC sp_changeobjectowner
’object_name’, ’ owner’
知识点:
数据库对象的命名规则如下所示:
[[[server_name.][database_name].][owner_name].]object_name
database_name 的默认值是当前数据库;owner_name 的默认值是当前用户。如果当前用户不是所有者,则当前用户使用过程时必须指定所有者名称。因为所有者名称是对象名称的一部分,所以两个不同的用户可以在相同的数据库中拥有对象名称相同的过程(例如 user1.proc1 和 user2.proc1)。
{该命名规则的唯一例外是系统过程,这些过程可以从任何数据库执行。系统过程驻留于 master 数据库,由系统管理员所有,其名称以 sp_ 打头。系统过程引用当前数据库的系统表}
对于由数据库的许多用户使用的过程,由 dbo创建该过程是最方便的。这使得所有用户都可以在不指定所有者名称的情况下找到该过程。
如果过程不在执行它的数据库中,则可以通过使用数据库名称完全限定过程名称来避免该错误,如下例所示:
EXECUTE database_1.user1.proc1
如果您或 dbo拥有该过程,则不需要所有者名称。例如:
EXECUTE database_1..proc1
建议: 在程序中或查询分析器中以非DBA身份登录数据库时,创建一个数据库对象时,请指定数据库对象所有者为:dbo (在SQL企业管理器中无需设定,企业管理器对新建一个表时,已经默认为dbo) 。
Eg: CREATE TABLE [dbo].[11111111111111] (
[Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Password] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Email] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Dept] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
)
GO
以下是CREATED TABLE时的说明(摘自SQL ONLINE HELP):
owner 默认为与 database_name 所指定的数据库中的当前连接相关联的用户 ID。如果 CREATE TABLE 语句由 sysadmin 固定服务器角色成员或 database_name 所指定的数据库中的 db_dbowner 或 db_ddladmin 固定数据库角色成员执行,则 owner 可以指定与当前连接的登录相关联的用户 ID 以外的其它用户 ID。如果与执行 CREATE TABLE 语句的登录相关联的用户 ID 仅具有创建表的权限,则 owner 必须指定与当前登录相关联的用户 ID。sysadmin 固定服务器角色成员或别名为 dbo 用户的登录与用户 ID dbo 相关联;因此,由这些用户创建的表的默认所有者为 dbo。不是由上述两种角色的登录创建的表所有者默认为与该登录相关联的用户 ID。- 关于数据库对象所有者非dbo时的可能造成的问题及解决方法
- 改变SQLServer 数据库所有对象的所有者成dbo
- 修改数据库中表的所有者为dbo。
- 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限 解决方法
- SQL2000权限问题(拒绝了对对象 'data'(数据库 'xxx',所有者 'dbo')的 SELECT 权限)
- 数据库所有者 (dbo)
- 数据库所有者 (dbo)
- 数据库所有者 (dbo)
- 更改数据库所有者的对象
- 更改数据库对象的所有者
- 更改数据库所有者的对象
- 将表的所有者改为dbo
- 将表的所有者改为dbo
- 把sql server 用户表的所有者修改为dbo的解决方法
- 进程跟踪时Session老丢失,日志:拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限
- 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限
- 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限。
- 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限
- ASP.Net中用DataGrid操作数据库
- 在本地计算机无法启动windows installer服务.错误997:重叠I/O操作进行中
- 正则表达式语法
- Asp中一些FSO方面的函数
- IBM MQ Client 错误 "unable to load mqic32.dll " 的解决办法! from Wells !
- 关于数据库对象所有者非dbo时的可能造成的问题及解决方法
- (原创)实现textarea内字符串选择查询替换功能
- [原创]JavaScript模拟ACDSEE简单功能
- 有趣的SETI@home
- 真实的C++之父
- 基于XMPP的统一消息模型
- Linux 硬件管理的基础知识
- 写了这么多的东东,终于有一篇上了CSDN的首页了!做个纪念,第50篇!
- ASP导出Excel数据的四种方法