【发布时间】:2012-03-22 10:15:30
【问题描述】:
我有一个在 SQL Server 2005 上运行的数据库,它具有用户定义的数据类型。自定义数据类型也是在model数据库中实现的,所以我在创建临时表的时候可以使用同样的自定义数据类型。
例如,在 AppDB 中我定义了这个数据类型:
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL
和模型中的完全相同:
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL
我发现,如果我的数据库实例上的安全登录具有 sysadmin 服务器角色,那么用户调用使用 product_code 数据类型在 tempdb 中创建表的存储过程没有问题——但是如果我从应用程序安全中删除 sysadmin登录,则存储过程调用失败。
如果我始终将用户定义的数据类型替换为 varchar 系统数据类型,则相同的存储过程调用会成功。
出于安全原因,我不想将 sysadmin 服务器角色添加到应用程序安全登录中——如果我想继续使用用户定义的数据类型,我有哪些选择? SQL Server 2008 是否会更改这些选项?
具体来说,除了授予 public 角色的权限之外,还需要哪些权限?需要对所有存储过程进行编辑的答案将被视为无响应。
【问题讨论】:
-
用户在AppDB中有什么权限?例如他们可以创建具有该数据类型的 本地 表吗?
-
另外,您可能会发现这篇博文很有用。从长远来看,与您的类型相关的文档将比尝试使用别名类型强制执行要少得多。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/14/…
-
感谢您提供文章链接——我已将此转发给我们的系统架构师以供他们审核。我刚刚将用户添加到 db_ddladmin 固定用户角色,问题已解决——这是正确的做法吗?我认为这比将用户添加到 sysadmin 角色要好——但我承认我对这些东西知之甚少。
-
嘿,也许 db_ddladmin 有点矫枉过正——我发现使用 EXECUTE AS OWNER 创建存储过程可能更有意义,根据这篇文章:stackoverflow.com/questions/429051/…
-
我有一个程序可以让你改变用户定义的数据类型。不过,它应该是 SQL Server 的标准功能。
标签: sql-server-2005 user-defined-types database-permissions tempdb