問題タブ [data-access]
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.
hibernate - Hibernateでデータベースレベルでユーザーアクセスを制限する方法
アプリ
さまざまなユーザーが使用するWebアプリを実装する必要があります。各ユーザーは、さまざまなテーブルに対して異なる特権を持っています。
Student
Student
特定のアクセスを制限するために、UIレベルで何かを用意します。たとえば、エントリを変更する権限を持たないユーザーの[編集]ボタンを非表示にします。ただし、データのセキュリティを確保するためだけに、より低いレベル(おそらくデータベースレベルで?)に何かを用意する必要があると思います。
問題
アプリにHibernate、JBoss、DB2、Strutsを使用しています。ユーザー/パスワード/ロールを使用してデータベースに対してユーザーを認証する、ある種のJBoss LoginModuleを使用する必要があると思います(ただし、間違っている可能性があります(?))。私はいくつかの調査を行い、次のオプションを考え出しましたが、どれも私の場合に当てはまらないようです。これは、マルチユーザーWebアプリで非常に一般的なデータアクセスの問題だと思います。誰かが私を正しい方向に向けてくれませんか?前もって感謝します!
hibernate.cfg.xml
JACCイベントリスナーで「grant」タグを使用します。これにより、すべての休止状態エンティティに「挿入」「更新」「読み取り」権限を設定できます。ただし、より細かい制御が必要な場合はどうなりますか?オブジェクト全体ではなく、特定のフィールドにアクセス許可を設定する必要があります。http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-decl-security.html各ejbのgetter/setterメソッドの権限を制限します。これを正しく理解していれば、すべてのユーザープロファイルに対してすべてのBeanを手動で構成する必要がありますが、これは私には非現実的です。 EJBメソッドのアクセス許可
DAOをコーディングして、ユーザー権限を確認します。ログインしたユーザーがアクションを実行できるかどうかを判断するために、特定のDAOメソッドが呼び出されるたびに巨大なアクセス許可テーブルをチェックする独自のユーティリティ関数をロールします。
Hibernateで「インターセプター」と「イベント」を使用します。各クラスに特定の「onLoad」、「onSaveorUpdate」などのイベントとインターセプターを定義します。この場合、個々のフィールドに権限レベルを指定できますか?http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-events.html
間違った木に吠えているのかもしれません。上記のすべては労働集約的であり、あまりインテリジェントではないようです。上記のオプションはいずれも、実行時にユーザー権限をプログラムで変更する方法を提供しません。これは、管理者レベルのユーザーがこのアプリで別のユーザーにより多くの制御を与えたい場合に役立ちます。
ここでデータアクセス制御を行うための良い方法は何ですか?
orm - ORM とハンドコードされたデータ アクセス レイヤー
宗教戦争が始まるかもしれないので、この質問をするのは少し怖いので、私が探しているものを明確にしたいと思います. 私は、あなたがどちらかの方法でジャンプしたい、またはジャンプした理由と、私のリストに追加するアイテムを探しています. ビッグチケット、ビッグバンのアイテムを探しています。また、製品に固有のアイテム (実際に関連性がある場合)。この時点で、製品 A と製品 B ではなく、ORM とマニュアルを評価しようとしています。
ORM の利点
ハンドコーディングの利点
完全な開示のために、データベースに対して直接変更できないコードを「何か」が実行するという考えは本当に好きではありませんが、ORM の潜在的に膨大な開発時間の利点を見ることができます。
私が.Netの世界にいることもおそらく注目に値します
[編集] ( Using an ORM or plain SQL?の質問は、多くの質問に答え、パフォーマンスに関するポイントを補強しているようです)
だから、私の質問を少し変えるために
初期段階で ORM を使用してアプリを構築し、その後徐々にハンドコーディングされた DAL に置き換えた人はいますか? このアプローチの落とし穴は何でしたか?
[さらに編集 - 今すぐ問題の核心に迫る] データベースに対して任意の SQL を実行できる Web サイトを持つことは恐ろしいことです。すべてのアクセスが sprocs を介して行われる場合、私のデータベースは適切で安全で快適な分離状態に置かれます。排他的に sprocs を使用すると、すべてではないにしても多くの SQL インジェクション攻撃ベクトルが除去されます。それについて何かコメントはありますか?
database - データベースを交換しますか?
多くの ORM ツールとカスタム データ アクセス レイヤー (DAO パターンなど) の目標は、最小限の作業でデータベース システム全体を交換できると思われるポイントまでデータベースを抽象化することです。
一般的な DAL パターンに従うことは通常、コードでは良い考えですが、データベースを交換することは決して最小限の作業ではないようです。(コスト、トレーニング、データ移行など)
大規模なシステムで 1 つのデータベースを別のデータベースに交換し、その影響をコードで処理した経験がある人はいますか? コードから実際のデータベースを抽象化することについて心配する価値はありますか?
wpf - シンプルな WPF/Silverlight データ アクセス フレームワークを知っている人はいますか?
SQL Serverコンパクトデータベースなどでいくつかのデータベーステーブルを定義し、フレームワークがウィンドウクラスなどを自動的に作成して、ユーザーがログインしてそのデータを編集できるようにする単純なWPFまたはSilverlightフレームワークを知っている人はいますか?
複雑な MVVM パターンの例を探しているわけではありません。ハードコードすることができます。開発者は、ユーザーがデータを編集するために必要なすべての CRUD コードとフォームと承認を作成する時間を節約できます。開発者は、10 個のデータベース テーブルを定義し、コード生成を実行して、作成したい単純なデータベース アプリケーションをほぼ 80% 完成させることができました。
これらはすべて一般的なコードになるため、このようなフレームワークが存在するか、誰かがすでにこのようなオープン ソース プロジェクトに取り組んでいると思います。
このようなフレームワークやツールを知っている人はいますか?
c# - DbType.Time の Datareader 結果を Timespan オブジェクトに変換する方法は?
DAAB 4.0 フレームワークで c# を使用して、datareader から dbtype.time の列タイプを持つ MS SQL 2008 データベースから結果を読み取っています。
私の問題は、MSDN のドキュメントでは、dbtype.time は timespan にマップする必要があると書かれていますが、timespan のクローズ コンストラクターだけが long を受け入れ、datareader から返された結果を long にキャストしたり、timespan に直接キャストしたりできないことです。
datareader.getTimeSpan() メソッドを示しているこの記事を見つけましたが、daab 4.0 の datareader にはこのメソッドがないようです。
では、datareader からの結果を timespan オブジェクトに変換するにはどうすればよいでしょうか。
tdd - 偽のリポジトリではなくデータベースでテストを実行するのは悪い習慣ですか?
私は利点が何であるかを知っており、より複雑なシステムで作業しているときに偽のデータを使用しています.
単純なものを開発していて、実際のデータベースに環境を簡単にセットアップでき、アクセスされるデータが非常に小さいためアクセス時間が問題にならず、いくつかのテストしか実行していない場合はどうなるでしょうか。
偽のデータを作成することはまだ重要ですか、それとも余分なコーディングを忘れて本物にスキップできますか?
私が実際のデータベースと言ったとき、それは本番データベースを意味するのではなく、テストデータベースを意味しますが、実際のライブ DBMS と実際のデータベースと同じスキーマを使用しています。
xml - ヘルプ!Flash がサードパーティ ドメインから XML データを読み込めない
以下を使用して、RSS フィードを使用して Yahoo からニュースを取得しています。
はい、これは合法であり、SWF がオフラインのときは完全に機能しますが、セキュリティ エラーが表示されますが、Adobeセキュリティ パネルで D ドライブの「ドメイン」を許可します。
しかし、サーバーにアップロードしてオンラインでテストするとすぐに:
Firefox3 では、データの読み込みに失敗し、ステータス バーに「finance.yahoo.com からデータを転送しています」というメッセージが表示されます。
InternetExplorer7 では、メッセージや警告なしでサイレントに失敗します。
何が起こっていますか?* ワイルドカード (すべてのドメインを許可) を含むcrossdomain.xmlファイルを配置しました。
web-services - SOA - ビジネス サービスへのデータ アクセスを個別の Web サービスとして提供するか、または提供しないか?
現在、私の組織内では、パイロット SOA プロジェクトのいくつかの規則を考え出そうとしています。一見したところ、データ エンドポイントに直接アクセスせずに、サービスのユーザーにビジネス サービスの使用を強制するのが最善であると考えました..しかし、これが当てはまらない、または開発者にとって「有効」である可能性がある特定のシナリオはありますか?サービス外の特定のデータ エンドポイントにアクセスするには?
これを公開すると、実際に再利用が損なわれるのではないかと常に恐れています。誰もが、利用可能な同じバックエンドデータを使用して同様のビジネスサービスを「再発明」し、「理論的には..より簡単に」書くだけになるからです。 「私のデータベースを使用するこの他のサービスは何をするのか?」と尋ねるのではなく、新しいビジネス サービスを提供します。
サービスがデータベースへのほぼ直接的なパス スルーである場合でも、開発者の時間を節約し、最終的にはビジネス コストを節約するルールを適用することができるからです。
考え?