我有一个运行在Server 2005上的数据库,它具有用户定义的数据类型。用户定义的数据类型也在模型数据库中实现,所以当我创建临时表时,我可以使用相同的用户定义的数据类型。
例如,在AppDB中定义了以下数据类型:
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL在模型中也是一样的:
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL我已经发现,如果我的数据库实例上的安全登录具有sysadmin Server角色,那么用户调用使用product_code数据类型在tempdb中创建表的存储过程没有问题--但是如果我从应用程序安全登录中删除sysadmin,则存储过程调用将失败。
如果我始终用varchar系统数据类型替换用户定义的数据类型,相同的存储过程调用就会成功。
出于安全原因,我不想将sysadmin Server角色添加到应用程序安全登录-如果我想继续使用用户定义的数据类型,我有哪些选项?这些选项是否随Server 2008而改变?
具体来说,除了授予公共角色的权限之外,还需要哪些权限?需要对所有存储过程进行编辑的答案将被视为没有响应性。
发布于 2012-03-07 05:32:17
用户定义的数据类型( a.k.a别名)和tempdb的问题首先是必须在模型数据库中定义用户定义的数据类型,这一点在这里已经正确完成。但是,必须授予操作这些对象的权限--这样做的合理方法是将达丁角色成员资格授予模型。当Server服务重新启动时,创建的将“继承”db_ddladmin角色成员资格。如果重新启动Server是不可取的,那么继续将db_ddladmin角色成员资格直接授予应用程序用户的tempdb。
要以编程方式将db_ddladmin角色添加到名为“MyAppUser”的用户模型中,请执行以下操作:
USE [model]
GO
EXEC sp_addrolemember N'db_ddladmin', N'MyAppUser'
GO非常清楚的是,db_ddladmin固定用户角色不需要添加到应用程序db中,只需要添加到模型中。
发布于 2012-03-04 22:17:17
不应该需要在tempdb中创建uddt。如果要匹配临时表的数据类型,请使用:
select fieldx, fieldy into #temptable from sourcetable或使用:
declare @fieldx product_code
select @fieldx into #temptable这样,字段大小就匹配,并且没有权限问题。
如果您希望在tempdb中创建永久表..。我的建议是为这些表创建一个特定的数据库。
https://stackoverflow.com/questions/9558220
复制相似问题