导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

不修改所有者的前提下该怎么做查询?(所有者不是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。
请大家指点。
...全文
807 点赞 收藏 22
写回复
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
alien54155415 2006-08-04
果然是这样,把登陆test从system administrator去掉就可以了。判断的时候,多附加的这个角色,比它自己在库里的db_owner权限更为优先啊,有意思。
谢谢了,顺带恭喜你了。
回复
去掉这句就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

回复
那不太可能会出现楼主的情况, 你把你的脚本(包括对象和用户权限)帖出来给大家测试
回复
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的库
回复
test在数据库中是什么身份?
回复
老大抢分了!
回复
所以对象的所有者是dbo时, 任何用户都可以不指定所有者名来访问
条件是没有与要访问的对象同名, 且所有者为当前用户的对象

如果对象的所有者不是dbo, 则只能被创建他的用户在不指定所有者的情况下访问.
其他用户访问都要显式指定所有者名
回复
不改所有者不行.

在sql 2000中, 在不指定所有者的情况下, 对对象的引用方式是这样的:
1. 先查找所有者名为当前用户名的对象, 如果找到, 则引用此对象
2. 如果找不到, 则找所有者为dbo的对象, 如果找到, 则引用此对象
3. 如果找不到, 则报错.
回复
十一月猪 2006-07-25
以创建表的用户登录,然后选择,也需要吗?
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告