我在SQL Sever 2005的Management Studio中,用sa进去创建出来的表都是dbo.Tablename, 我现在想创建一个不是dbo的表, 我新建一个Login 叫LoginTest1, 在它的Mapping中选中要创建表的数据DbTest1, 然后在DbTest1里创建一个User 叫 UserTest1, 在这个数据库的Database Role里创建一个RoleTest1,把UserTest1设为RoleTest1,RoleTest1的Owner属性不设为dbo(默认是dbo),而是设为db_owner.
然后就用LoginTest1进去,打开DbTest1,创建一个表叫做Table_Test1,但它的全名还是叫做dbo.Table_Test1,而不是我预计的db_owner.Table_Test1.为什么?
哪一步错了?
应该怎样才能创建出db_owner.Table_Test1?

解决方案 »

  1.   

    DBO,在数据库中权限是最高的,哪个表他都有权限访问
      

  2.   

    SQL Server 2005 还引入了“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2000 中,首先检查的是调用数据库用户所拥有的架构,然后是 DBO 拥有的架构。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO 作为其默认架构。
      

  3.   

    先建一个SQL用户(在企业管理器里面的登陆里面,新建一个登陆帐号,然后再把你的数据库相应的权限附给这个帐号,一般都是db_owner,public)然后就在create table user_acc.tablename
    写建表语句就OK!
      

  4.   

    解决了,新建一个Login,不要为它选Server Roles, 而是选User Mapping,把它Map到一个Database里,那里有一项Default Scheam, 改它就行了.不过我是用Windows authentication试出来的,也就是说我建立的Login是Windows Authentication的,而不是SQL Server Authentication.前者好像没试成功.
      

  5.   

    续上,用上面的方法Create好Login后,就用这个Login来登錄,它创建出来的table就是刚才设置的Schema,而不是dbo了.因为新建一个Login的时候,Default Schema是dbo.如果选Server Role里的sysadmin,也是dbo.
      

  6.   

    在SQL2005中,表是存在于数据库中的Schema(架构)下的。
    上面所说的dbo.Table中,dbo是Schema名,Table是表名。在2005中,用户权限里有个“默认Schema”:
    如果你在建表的时候只给表名的话,那么表的Schema就是这个用户对应的默认Schema。
        比如说:Create Table Table1。
    如果在建表的时候指定Schema,那么表的Schema就是你指定的架构了。
        比如说:Create Table Sch_1.Table1。当然,这里面还有很多复杂的权限需要设置,具体的可以查看2005的帮助(Create Table)。
      

  7.   

    就是,Schema好像是2005才加上去的吧?那天我们经理给我找了篇MSDN文章我才弄清楚.
      

  8.   

    其实2000里面已经有Schema的概念了,只是没有实用。
    在系统视图里有Information_Schema的,那个就是Schema。到了2005后就有了Schema的概念了。
      

  9.   

    首先创建一个Schema例子
    CREATE SCHEMA [db_owner] AUTHORIZATION [所有者,也就是某个用户]
    GO创建好这个以后你想使用这个架构建表必须先拥有这个架构的使用权限
    sa这个用户就不用授权了以后建什么东东记得加上这个[db_owner]你如
    CREATE TABLE db_owner.table1CREATE PEOCDEURE db_owner.proc就是这样了