2011-07-28 5 views
0

SQL Server 2000の古いストアドプロシージャには、SQL Serverの役割を担うユーザーアプリケーションのセキュリティに使用されていたアプリケーションからシステムカタログが更新されていました組み込みセキュリティとNTログイン。ストアドプロシージャからのシステムカタログの更新

我々はSQL Server 2008にDBを移行し、システムカタログへ

アドホック更新は許可されていません我々はSQL Server 2008のエラーを取得し、これらのストアドプロシージャを実行してみてください。

SQL Server 2005以降では、MSがカタログの更新をサポートしていないことを確認しました(専用管理者接続(DAC)を使用していない場合)。

誰かが新しいバージョンやSqlサーバーで実行されている.Netコードのような他の方法でこれを行う方法を教えてくれれば幸いです。

update sysusers 
set roles = convert(varbinary(2048), substring(convert(binary(2048), roles), 1, @ruidbyte-1) 
      + convert(binary(1), ([email protected]) & substring(convert(binary(2048), roles), @ruidbyte, 1)) 
      + substring(convert(binary(2048), roles), @ruidbyte+1, [email protected])), 
    updatedate = getdate() 
where uid = @memuid 

delete from syspermissions where grantee = @uid 

delete from sysusers where uid = @uid 

insert into sysusers 
values(@uid, 0, @rolename, NULL, 0x00, getdate(), getdate(), @owner, NULL) 
+3

基本的に、これらのシステムカタログ**ビュー**(SQL Server 2005/2008以降)は、システムテーブルへの読み取り専用ビューです。これらのシステムテーブルは、T-SQLとSQL-CLRのどちらの通常のコードでも編集できません。このような操作を行うには、CREATE USERやDROP USERのような公開APIを使用する必要があります。これを行うと、システムカタログビューは自動的に更新されます。 –

+0

@marc_sと合意しました。セキュリティ。 –

答えて

1

以下

いくつかのサンプルクエリSQL Serverのシステム・テーブルを更新するルーチン理由はありません。これまで

すべてのバージョンのSQL Serverで適切にコマンドとシステムストアドプロシージャを使用することができます。

することはできませんとにかく、あなたが述べたように:何のハッキングや回避策

+0

ありがとうございます。次の操作を実行するためにいくつかのequivalemntシステムストアドプロシージャは、被付与者が= は、UID = #uid がsysusersの 値(#uid、0、#rolename、NULL、0x00で、挿入はsysusersから削除#uid syspermissionsから削除何になりますgetdate()、getdate()、#owner、NULL) –

+0

DROP USERとCREATE USER(検索のみ)。ユーザーの削除権限も削除する – gbn

+0

非dbo_ユーザーがsp_addrolememberの改訂版に安全にアクセスして実行できるようにするsp_addrolememberシステムストアドプロシージャを使用しない理由。この制限はSQL 2008にも存在しますか? –

0

それは予期しない結果につながる可能性として、危険な作業することができ、システムテーブルの更新はありません。だからあなたがそれをする前に、あなたが何をしているのかに非常に自信を持っていることを確かめてください。データベース内の望ましくない結果やクラッシュを防ぐために、元のデータベースのレプリカで変更を行うことをお勧めします。

可能な方法は次のようになります。

  1. DACを使用してください。あなたはGoogleでそれを検索した後に技術を得ることができます。システムテーブルをハッキングすることが多いです。

  2. は、次のコードを使用します。 '更新を許可'

sp_configureを、1 はオーバーライド と

//あなたのコード

再設定が

再設定は構成します行く行きますデータベースをバックアップします。 ''を 'の更新が許可'に設定すると、システムテーブルを更新できます。

しかし、あなたのタスクの別の選択肢を見つけることが最善の方法です。

関連する問題