我有一个在 SQL Server 2005 上运行的数据库,它具有用户定义的数据类型。用户定义的数据类型也在模型数据库中实现,所以当我创建一个临时表时,我可以使用相同的用户定义的数据类型。
例如,在 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 的变化而改变吗?
具体来说,除了授予公共角色的权限之外,还需要哪些权限?需要编辑所有存储过程的答案将被视为无响应。