200分:请问一个schema的问题 100athossmth]

发布时间:2016-12-10 9:02:35 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"200分:请问一个schema的问题 100athossmth]",主要涉及到200分:请问一个schema的问题 100athossmth]方面的内容,对于200分:请问一个schema的问题 100athossmth]感兴趣的同学可以参考一下。

我做的事情是: 第一步. 建立一个数据库,名字为[Test],它的默认owner是[sa]  第二步. 在数据库[Test]中建立一个User,名字是[kimliuTest],映射到数据库Server上的Login [kkhad\kimliu],这是一个windows dowmain User. 第三步. 在数据库[Test]中建立一个Schema,名字是[schTest],它的Schema Owner是User [kimliuTest]  第四步. 在数据库[Test]中建立两个表[dbo].[t1]和[schTest].[t2]  第五步. 运行            ALTER USER kimliuTest WITH DEFAULT_SCHEMA = schTest  来设定USER [kimliuTest]的默认Schema 现在我的问题是 问题一 如果我试图运行            exec sp_changeobjectowner 'dbo.t1', 'schTest'             exec sp_changeobjectowner 'dbo.t1', 'kimliuTest'  , 都会失败:            Msg 15411, Level 11, State 1, Procedure  sp_changeobjectowner, Line 107             Database principal or schema 'schTest' does not exist in  this database.             Msg 15411, Level 11, State 1, Procedure  sp_changeobjectowner, Line 107             Database principal or schema 'kimliuTest' does not exist in  this database.  没道理啊,第一个应该可以运行的啊? 不过这个还不是重要,第二个问题比较挠头: 问题二 如果我运行            select * from schTest.t2  一切正常,但如果我运行            select * from t2  错误信息说:            Msg 208, Level 16, State 1, Line 1             Invalid object name 't2'.  为什么?我是用[kkhad\kimliu]这个windows domain账号, Active Monitor 里显示也正常,问题在哪里呢? 分数不是问题,一定在开贴给分,只求大侠们出手!

奇怪,为什么看不到?

Mark!

顶一下,有高手吗?

mark

这一步俺还没用过..不懂 ALTER USER kimliuTest WITH DEFAULT_SCHEMA = schTest 

hi, I can repro your issue in my experiments, here is it; create database test create login [fareast\zhao]from windows create user kimliuTest for login [fareast\Zhao] create schema schTest authorization kimliuTest create table [dbo].[t1](id int) create table [schTest].[t2] (name sysname) -- ALTER USER kimliuTest WITH DEFAULT_SCHEMA = schTest  sp_changeobjectowner 'dbo.t1', 'schTest'  the same error I encountered, and then you can refer to the snippet in BOL: This stored procedure only works with the objects available in Microsoft SQL Server 2000. This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use ALTER SCHEMA or ALTER AUTHORIZATION instead. sp_changeobjectowner changes both the schema and the owner. To preserve compatibility with earlier versions of SQL Server, this stored procedure will only change object owners when both the current owner and the new owner own schemas that have the same name as their database user names.

关注

ok?

多谢redbb,前阵子在忙user training,这个东西搁下了。 今天试验了一下,发现你的程序运行结果是对的。我的问题是由一个比较奇怪的东西引起的。 在你的script运行完之后,如果运行 SELECT  SYSTEM_USER AS SystemUser, db_name() DbName, user_name() UserName, default_schema_name  FROM sys.database_principals WHERE name=USER  就可以看到 SystemUser DbName UserName default_schema_name kimliu test kimliuTest  schTest 这时候kimliuTest是可以直接访问schTest.t2的。 但是, 如果在建立test这个数据库之前, 在database Server的Security->Login里, 打开kimliu这个Login的properties, 在Server Roles里, 把sysadmin选中, 那么,再运行你的script,就会发现 SELECT  SYSTEM_USER AS SystemUser, db_name() DbName, user_name() UserName, default_schema_name  FROM sys.database_principals WHERE name=USER  的结果是 SystemUser DbName UserName default_schema_name kimliu test kimliuTest  dbo 我的问题就是这样出现的,因为为了方便我总是把自己这个login在local的database server中设为sysadmin. 也就是说,如果一个Login的Server Role是sysadmin,那么,在一个它可以访问的数据库里,其schema将不是我们用script设定的那个,而是dbo! 不知道这是不是一个bug,还是一个安全设定上的先后顺序引起的正常结果。

上一篇:SqlServer2000有这样的功能吗? 50CSDN]
下一篇:两个相同字段的表的顺序连接 20CSDN]

相关文章

相关评论