1

ユーザー定義のデータ型を持つSQL Server 2005上で実行されているDBがあります。ユーザー定義のデータ型もモデルデータベースに実装されているので、私は一時テーブルを作成するときに同じユーザー定義のデータ型を使用できます。SQL Server 2005のユーザー定義データ型、tempdbおよびアクセス許可

CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL 

とモデルで正確に同じ:

CREATE TYPE [dbo].[ product_code] FROM [varchar](8) NULL 

私は私のデータベースインスタンス上のセキュリティログインが持っている場合は検出されませんでしたAppDBで、私はこのデータ型が定義されている

例えば

、 sysadminサーバーロールを使用すると、product_codeデータ型を使用してtempdbにテーブルを作成するストアドプロシージャを呼び出すのに問題はありませんが、アプリケーションセキュリティログインからsysadminを削除すると、ストアドプロシージャ呼び出しは失敗します。

ユーザー定義データ型を全体のvarcharシステムデータ型に置き換えると、同じストアドプロシージャ呼び出しが成功します。

セキュリティ上の理由から、アプリケーションセキュリティログインにsysadminサーバーロールを追加したくありません。ユーザー定義のデータ型を引き続き使用するにはどのようなオプションがありますか?これらのオプションはSQL Server 2008で変更されますか?

具体的には、公開ロールに付与されているものを超えるアクセス許可は必要ですか?すべてのストアドプロシージャの編集を必要とする回答は無応答とみなされます。

+0

ユーザーにはどのようなアクセス許可がAppDBにありますか?例えばそのデータ型を持つ* local *テーブルを作成できますか? –

+1

また、あなたはこのブログ記事が役に立つかもしれません。あなたのタイプに関するドキュメントは、エイリアスタイプを使ってそれを実施しようとするよりも、ずっと面倒ではありません。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/14/bad-habits-to-kick-using-alias-types.aspx –

+0

この記事のリンクをありがとうございます - これを転送しました私たちのシステムアーキテクトにレビューを依頼します。私はdb_ddladminの固定ユーザーロールにユーザーを追加しました。問題は解決されました。これは正しいことですか?私はそれがユーザーをsysadminロールに追加するよりも優れていると推測しますが、私はこのことについてあまり知らないと認めます。 –

答えて

1

ユーザ定義のデータ型(別名別名)に問題とtempdbのは、ユーザ定義のデータ型は、ここで正しく行われている通りであるモデルデータベースに定義されなければならないことを最初に。ただし、これらのオブジェクトを操作する権限を付与する必要があります。これを行うには、db_ddladminロールのメンバーシップをモデルに付与するのが妥当な方法です。 SQL Serverサービスが再起動されると、tempdbは、db_ddladminロールメンバシップを "継承"します。 SQL Serverの再起動が望ましくない場合は、db_ddladminのロールメンバーシップを、のtempdb(アプリケーションユーザー)に直接付与してください。

「MyAppUser」という名前のユーザーのためのモデルに、プログラムはdb_ddladmin役割を追加するには:非常に明確にするために

USE [model] 
GO 
EXEC sp_addrolemember N'db_ddladmin', N'MyAppUser' 
GO 

はdb_ddladmin固定ユーザーロールは、アプリケーションに追加する必要はありません。 db、モデルにのみ。

-1

tempdbにuddtを作成する必要はありません。あなたは一時テーブルのデータ型を一致させたい場合は、使用します。

select fieldx, fieldy into #temptable from sourcetable 

または使用:

declare @fieldx product_code 

select @fieldx into #temptable 

フィールドサイズが一致して無許可の問題が存在しないこの方法。

tempdbで永続的なテーブルを作成したい場合...私のアドバイスは、これらのテーブルの特定のデータベースを作成することです。

関連する問題