首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2005用户定义的数据类型、tempdb和权限

Server 2005用户定义的数据类型、tempdb和权限
EN

Stack Overflow用户
提问于 2012-03-04 19:46:01
回答 2查看 2.9K关注 0票数 1

我有一个运行在Server 2005上的数据库,它具有用户定义的数据类型。用户定义的数据类型也在模型数据库中实现,所以当我创建临时表时,我可以使用相同的用户定义的数据类型。

例如,在AppDB中定义了以下数据类型:

代码语言:javascript
复制
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL

在模型中也是一样的:

代码语言:javascript
复制
CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL

我已经发现,如果我的数据库实例上的安全登录具有sysadmin Server角色,那么用户调用使用product_code数据类型在tempdb中创建表的存储过程没有问题--但是如果我从应用程序安全登录中删除sysadmin,则存储过程调用将失败。

如果我始终用varchar系统数据类型替换用户定义的数据类型,相同的存储过程调用就会成功。

出于安全原因,我不想将sysadmin Server角色添加到应用程序安全登录-如果我想继续使用用户定义的数据类型,我有哪些选项?这些选项是否随Server 2008而改变?

具体来说,除了授予公共角色的权限之外,还需要哪些权限?需要对所有存储过程进行编辑的答案将被视为没有响应性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-07 05:32:17

用户定义的数据类型( a.k.a别名)和tempdb的问题首先是必须在模型数据库中定义用户定义的数据类型,这一点在这里已经正确完成。但是,必须授予操作这些对象的权限--这样做的合理方法是将达丁角色成员资格授予模型。当Server服务重新启动时,创建的将“继承”db_ddladmin角色成员资格。如果重新启动Server是不可取的,那么继续将db_ddladmin角色成员资格直接授予应用程序用户的tempdb

要以编程方式将db_ddladmin角色添加到名为“MyAppUser”的用户模型中,请执行以下操作:

代码语言:javascript
复制
USE [model]
GO
EXEC sp_addrolemember N'db_ddladmin', N'MyAppUser'
GO

非常清楚的是,db_ddladmin固定用户角色不需要添加到应用程序db中,只需要添加到模型中。

票数 2
EN

Stack Overflow用户

发布于 2012-03-04 22:17:17

不应该需要在tempdb中创建uddt。如果要匹配临时表的数据类型,请使用:

代码语言:javascript
复制
select fieldx, fieldy into #temptable from sourcetable

或使用:

代码语言:javascript
复制
declare @fieldx product_code

select @fieldx into #temptable

这样,字段大小就匹配,并且没有权限问题。

如果您希望在tempdb中创建永久表..。我的建议是为这些表创建一个特定的数据库。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9558220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档