問題タブ [execute-as]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - SQL 'Execute As' ログイン コマンドと Linq to SQL
「Execute As」コマンドを使用して、SQL クエリを別のログインとして実行しようとしています。Linq to SQL を使用しているため、データ コンテキスト クラスを生成し、ExecuteQuery メソッドを使用して「Execute As」SQL コマンドを実行しています。次に、成功した Linq to SQL コマンドを呼び出します。ただし、後続のすべてのクエリは次のエラーで失敗します。
現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。
私が試したコードスニペットは次のとおりです。
2 番目のクエリでどのクエリを実行しても、上記のエラー メッセージが表示されます。どんな助けでも大歓迎です。
sql-server - ログオン トリガー内の実行コンテキストの切り替え
混合モード認証を使用して、Microsoft SQL Server 2008 Express インスタンスに MyDB というデータベースがあります。データベース MyDB を使用するアプリケーションは、現在、現在のユーザーの Windows 資格情報を使用して、Windows 認証を使用して接続します。このログインは「パブリック」サーバー ロールのメンバーであり、MyDB データベースでユーザーがマップされています。このデータベース ユーザーは、db_datareader および db_datawriter データベース ロールのメンバーです。
私が望むのは、アプリケーションが接続すると、MyDB で読み書きする権限があることです。ただし、別のアプリケーションが同じログインを使用して接続する場合は、読み取りのみを許可する必要があります。
私が考えたのは、接続文字列のアプリケーション名の部分をチェックするログオン トリガーを作成し、それに基づいて実行コンテキストを切り替えるかどうかを決定することでした。(記録として、接続文字列のアプリケーション名に依存することは決して安全ではなく、回避するのは非常に簡単であることを知っています。ここでの目的は、データベースを保護することではなく、ユーザーが変更を回避できるようにすることです。 Microsoft Excel などの別のアプリケーションを使用して接続した場合のデータ)
db_datareader のメンバーである MyDB データベースのユーザーにマップされた「myapp_reader」という新しいログインを作成しました。
次に、次の TSQL を使用してログオン トリガーを作成してみました。
しかし残念ながら、それはうまくいきません。接続しようとすると、次のエラーが表示されます。
トリガーの実行により、ログイン 'MyComputer\MyWindowsUsername' のログオンに失敗しました。
データベース コンテキストを「master」に変更しました。
言語設定を us_english に変更しました。(Microsoft SQL Server、エラー: 17892)
そして、エラーログを見ると、次のように書かれています:
エラー: 15590、重大度: 16、状態: 1。
アドホック レベルの 'Execute As' ステートメントでは、'No Revert' または 'Cookie' オプションのみを使用できます。
エラー: 17892、重大度: 20、状態: 1。
トリガーの実行により、ログイン 'MyComputer\MyWindowsUsername' のログオンに失敗しました。[クライアント: xxx.xxx.xxx.xxx]
このエラーは、ログオン トリガーの実行コンテキストを永続的に変更できないということですか?
sql - EXECUTE ASをセキュリティに使用すると、SQLServerの戦略がスピードアップします。
私は、セキュリティを標準とは少し異なる方法で実装するシステムを検討し始めたところです。
システムのユーザーごとに新しいSQLユーザーを作成します(現在約32Kあります)。各クエリは、最初にSAアカウントを使用している接続を介して送信され(これにとらわれないようにします)、ユーザーが誰であるかがわかった後、各クエリでEXECUTEASUSERが使用されます。
ユーザー数が非常に多い現在、新規ユーザーの作成と切り替えはパフォーマンスに大きな打撃を与えており、同社は状況の改善を検討しています。
いくつかのポイント:-SQLコードは動的SQL(ストアドプロシージャではありません)-元のアイデアは、会社の開発者がアクセス許可について心配するSQLの記述について心配する必要性を軽減し、別のレイヤーにそれについて心配させることでした。
クエリの実行時間を改善し、EXECUTE AS USERコードを回避し、それでも同じセキュリティ監視を取得するにはどうすればよいでしょうか。
SQL Serverは、ユーザーアカウントを格納するためのセッション変数をサポートしていますか?
sql-server - 'Try/Catch' ブロック内の SQL Server 'Execute As'/Revert パターン
SQL Server 2012 の Try/Catch ブロック内から Execute As/Revert を使用するときに、「最適な」パターンを使用していることを確認したいと思います。以下のコードは正しく動作するように「思われます」...セキュリティ上の懸念、「より良い」アプローチなどはありますか?
以下は私のコードです:
oracle - 別のユーザーに代わってOracle DMBS_AQ.REGISTERを実行する方法は?
1 人の特権スケジューラ ユーザー - user1 は電子メール通知を受け取りますが、別の 2 人 (user2、user3) は受け取りません。
以下のコードを user3 スキーマで実行したいのですが、これを user2 (一時的な sys.dbms_aq アクセスを使用してスキーマで直接実行されたコード) で正常に実行したため、彼は通知を受け取るようになりました。user1 のボット ユーザー エージェントに対してデータベース アクセスが有効になっています。
ご覧のとおり、問題を「何」が解決するかはわかっていますが、その方法はわかりません:-)
問題は、2 番目のアカウント (user3) に直接アクセスできないことです。 user3 に代わってこのコードを実行するにはどうすればよいですか?
すでに user3 で create procedure を試行し、すぐに匿名ブロックを実行しましたが、DBA_QUEUE_SUBSCRIBERS に 3 ではなく USER# 1 で登録されています。
データベースのバージョンは、UNIX では 11.2.0.3.0 です。
sql-server - DM_EXEC_SESSIONS がアクティブな接続を返さない
SYS.DM_EXEC_SESSIONS
システムからすべてのアクティブな SQL Server 接続を取得するために使用しています。ログに記録されたユーザーに VIEW SERVER STATE 権限がない場合、ログに記録されたユーザーのみが表示され、それ以外の場合はすべてのユーザーが表示されることを知っています。
ただし、すべての基本ユーザーに VIEW SERVER STATE 権限を (セキュリティのために) 付与したくはありませんが、すべてのユーザーを取得する必要があります。そこで、WITH EXECUTE をオプションとして次の関数を作成しました。
パワーユーザーには VIEW SERVER STATE 権限がありますが、関数は空の結果セットを返します。なぜですか?
基本ユーザーのすべての接続を取得する方法はありますか?