不修改所有者的前提下该怎么做查询?(所有者不是dbo)

alien54155415 2006-07-25 07:06:50
以test用户(db_owner)建表tt,则无论sa或test,都要这样查询
1.Select * from test.tt-->ok
2.Select * from tt—〉会找不到
现在想用2,不带所有者名,如果改变所有者exec sp_changeobjectowner 'test.tt', 'dbo',是可以的,不改变的话要怎么做。看过之前类似的帖子,但是试过都不成功。如http://community.csdn.net/Expert/topic/4848/4848922.xml?temp=.8172113。
请大家指点。
...全文
854 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
alien54155415 2006-08-04
  • 打赏
  • 举报
回复
果然是这样,把登陆test从system administrator去掉就可以了。判断的时候,多附加的这个角色,比它自己在库里的db_owner权限更为优先啊,有意思。
谢谢了,顺带恭喜你了。
zjcxc 元老 2006-08-03
  • 打赏
  • 举报
回复
去掉这句就OK了

exec sp_addsrvrolemember N'test', sysadmin
GO
alien54155415 2006-08-03
  • 打赏
  • 举报
回复
最后一次,哈
alien54155415 2006-08-02
  • 打赏
  • 举报
回复
up3
alien54155415 2006-08-01
  • 打赏
  • 举报
回复
再up一次
十一月猪 2006-08-01
  • 打赏
  • 举报
回复
钻石真亮啊
十一月猪 2006-08-01
  • 打赏
  • 举报
回复
又见老大
又见钻石
;)
jacky_majia_001 2006-08-01
  • 打赏
  • 举报
回复
up
alien54155415 2006-07-31
  • 打赏
  • 举报
回复
up
alien54155415 2006-07-28
  • 打赏
  • 举报
回复
use [test]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[test].[tt]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [test].[tt]
GO

if not exists (select * from master.dbo.syslogins where loginname = N'test')
BEGIN
declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb = N'test', @loginlang = N'繁體中文'
if @logindb is null or not exists (select * from master.dbo.sysdatabases where name = @logindb)
select @logindb = N'master'
if @loginlang is null or (not exists (select * from master.dbo.syslanguages where name = @loginlang) and @loginlang <> N'us_english')
select @loginlang = @@language
exec sp_addlogin N'test', null, @logindb, @loginlang
END
GO

exec sp_addsrvrolemember N'test', sysadmin
GO

if not exists (select * from dbo.sysusers where name = N'test' and uid < 16382)
EXEC sp_grantdbaccess N'test', N'test'
GO

exec sp_addrolemember N'db_owner', N'test'
GO

CREATE TABLE [test].[tt] (
[id] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[NO1] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[num] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
) ON [PRIMARY]
GO

zjcxc 元老 2006-07-27
  • 打赏
  • 举报
回复
那不太可能会出现楼主的情况, 你把你的脚本(包括对象和用户权限)帖出来给大家测试
alien54155415 2006-07-26
  • 打赏
  • 举报
回复
-->登陆时查询分析时以test登陆,输上对应的密码就可以了,...
请问你试过吗
wubala 2006-07-26
  • 打赏
  • 举报
回复
登陆时查询分析时以test登陆,输上对应的密码就可以了,像这样查询了select * from table1
alien54155415 2006-07-26
  • 打赏
  • 举报
回复
-->如果对象的所有者不是dbo, 则只能被创建他的用户在不指定所有者的情况下访问.
但是以test登陆,也需要指定所有者啊。不知道是怎样的,请再说下。
alien54155415 2006-07-26
  • 打赏
  • 举报
回复
在库里是public和db_owner,对应的登陆test是system administrator,2000的库
zjcxc 元老 2006-07-26
  • 打赏
  • 举报
回复
test在数据库中是什么身份?
  • 打赏
  • 举报
回复
老大抢分了!
zjcxc 元老 2006-07-25
  • 打赏
  • 举报
回复
所以对象的所有者是dbo时, 任何用户都可以不指定所有者名来访问
条件是没有与要访问的对象同名, 且所有者为当前用户的对象

如果对象的所有者不是dbo, 则只能被创建他的用户在不指定所有者的情况下访问.
其他用户访问都要显式指定所有者名
zjcxc 元老 2006-07-25
  • 打赏
  • 举报
回复
不改所有者不行.

在sql 2000中, 在不指定所有者的情况下, 对对象的引用方式是这样的:
1. 先查找所有者名为当前用户名的对象, 如果找到, 则引用此对象
2. 如果找不到, 则找所有者为dbo的对象, 如果找到, 则引用此对象
3. 如果找不到, 则报错.
十一月猪 2006-07-25
  • 打赏
  • 举报
回复
以创建表的用户登录,然后选择,也需要吗?
加载更多回复(2)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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