SQL Server表所有者 - 更改默认值

时间:2010-02-04 22:14:15

标签: sql-server sql-server-2005 security

SQL Server中是否存在类似于USE(切换数据库)的内容,可以控制用于表的所有者前缀?

例如,我们有一个应用程序坚持创建表“theServiceAccount.TheTableName”;我们真正想要的是强制它将表名放在dbo下...所以“dbo.TheTableName”。我们没有一个很好的方法来更改应用程序运行的SQL(它是已售出的),而不是在启动时允许我们运行某些SQL的钩子。因此,如果我们可以在该点运行一个sql,这会使后续的create table(或其他操作)默认为dbo而不是正在使用的服务帐户,那就太棒了。

我确实知道create table语法允许指定所有者,但此时似乎不是一个选项。据我所知,这个应用程序生成的SQL从未指定所有者;它只是在它运行的SQL中有表名。

谢谢!

2 个答案:

答案 0 :(得分:3)

在2005年,默认情况下,除非指定,否则每个用户都有自己的默认架构。

这应该做你需要的:

USE databasename  
ALTER USER theServiceAccount WITH DEFAULT_SCHEMA = dbo

您还可以通过查看用户属性并更改默认架构

来通过SSMS更改此设置

答案 1 :(得分:0)

我相信您可以通过创建具有所需默认架构的用户,然后使用EXECUTE AS语句(请参阅http://msdn.microsoft.com/en-us/library/ms181362.aspx

来实现此目的

在您的示例中,您可以创建一个名为“specialDBO”的用户(或使用dbo,不建议使用),其默认架构设置为dbo。然后你有这样的事情:

     USE [myfabdb];
     EXECUTE AS USER = 'speicalDBO';

     ... blah blah blah...

     REVERT;

请记住,USE语句之后您不能拥有EXECUTE AS语句。