2016-12-11 1 views
1

私はここに奇妙な状況があります。私は、httpの要求をMarkLogicサーバーに送信するアプリケーションを構築しようとしています。これは、search:search("")を実行するXQueryコードにヒットします。空のクエリを検索に渡しているので、デフォルトの関連する結果が返されます。
私は展開のためにRoxyを使用しています。 私は、コマンドによって一般的なロキシー展開関数を呼び出すとき -search:検索は検索コンソールで結果を返しますが、httpによるアプリケーションからのヒットが得られた場合は結果は表示されません。

ml local deploy content. 

私はlocalhostを打つとき、それは後に、すべての文書を読み込み、:7040を予想通り、私は結果を得ます。ここまでは順調ですね。
ここでは、Roxyの既存のメソッドdeploy_contentをオーバーライドし、すべてのデータをコンテンツデータベースにロードするためにxdmp:document-load()を実行するXQuery関数を呼び出す新しいメソッドを定義します。ここにコードスニペットがあります -

私がアプリケーションをヒットしたとき、同じコードがクエリコンソールからうまく機能していましたが、結果が0になりました。私はこれが役割と特権の概念に関係していると思います。なぜなら私はroxyから新しく作成されたユーザーに管理者ロールを提供すると、結果を期待どおりに得るからです。後で自分のアプリケーションを使用するデフォルトのユーザーに管理者ロールを提供したくありません。だから、私の問題を解決する役割、特権、認証という点でどのような変更が必要ですか?
注:私がlocalhost:7040を押すと、認証を要求しません。

ml.app-role:xyz-role 

このユーザーの役割ですべての既定のアクセス許可を取得する機能はありますか。
これはバニラインストールであるため、これはアプリサーバーに使用されるユーザーです。
クエリコンソールに使用されるユーザーはadminです。
ロード・ドキュメントの1つにコマンドxdmp:document-get-permissions()を実行しましたが、空のシーケンスが戻されました。
xdmp:document-get-permissions("/a-ha+Take-on-Me.xml")
認証方式=アプリケーションレベル

答えて

3

あなたはたくさん述べるが、あなたは、物事のセキュリティ面についてはあまり何も言及したことがない:

  • ユーザーをあなたに展開を?
  • デフォルトの権限は、そのユーザーの役割の下に表示されますか?
  • ユーザーがアプリサーバーに使用しましたか?
  • ユーザーがクエリコンソールに使用しましたか?
  • サンプルドキュメントに添付されている実際のアクセス許可はありますか?ファーストトラックへ
このヘルプ、私は非常にバニラがMLとロキシーのインストールを想定しお答えします:あなたはおそらく管理者としてクエリコンソールを使用している

  • 使用する可能性があります
  • 管理者としてのRoxyのデプロイヤー。 アプリケーションサーバー経由で別のユーザーを使用している可能性があります。

上記のコードでは、Roxyを通じてユーザーの既定のアクセス許可が使用されています。管理者の場合、管理者はほとんどすべてのセキュリティを迂回するため(ドキュメントへの書き込み権限を必要とすることさえも含む)、デフォルトの権限はない可能性があります。

見るべき大きなものは、 xdmp:document-get-permissions()のいずれかの文書です。

アンサー次の質問:アプリケーションユーザーはドキュメントへの読み取りアクセス権を持っていますか? そうでない場合は、上記のアプローチを調整して、より適切な権限を持つ文書を挿入してください。

ロングインは必要ありませんか?これは、ログインをアプリケーションレベルに設定し、おそらくRoxyのデフォルトユーザーのみを使用しているためです。認証が必要ですか? Roxt xml設定でダイジェストに変更し、より多くのユーザ/ロールを定義します。

どのような役割が必要ですか? さて、アプリケーションを使用してドキュメントに読み書きするには、少なくとも1人のユーザー(管理者以外)が必要です。あまりにも多くの仮定をするより多くをExplainig。セキュリティモデルを理解し、自分で選択する必要があります。しかし、例として、パスワードとロール 'user1'を持つ 'user1'を作成し、Roxyで定義されたあなたのアプリユーザーのロールへのこのアクセス権を与え、認証をダイジェストに設定します。これで、認証と、パスワードでアプリを使用できるユーザーができました。上のドキュメントロードスクリプトを変更して、読み込まれたドキュメントのuser1ロールへの読み書きアクセスを許可します。

  • Doucmentsはそれをロード
  • Auhenticationでログインする

    • ユーザー、そのユーザー(および変更)で読み取ることができます:

      は今、あなたはしてアプリを持っています。

    これはあなたに絶対的な基礎を与えるでしょう。既定のユーザー(非ログインアプリケーションユーザー)は最小限の権限を持ち、残りはログインユーザーに移動するため、まだ準備ができていません。

    ものを修正するには不十分ですか?上記の質問に答えると、人々が援助するためのより多くのものがあります。

    あなたはボックスロキシーアプリのうちにml local deploy contentを実行して明示的に文書のアクセス権を設定しながら、それはあなたのコンテンツDBにファイルをアップロード...

  • +0

    ml.app-role:xyz-role このユーザーの役割ですべての既定のアクセス許可を取得する機能はありますか。 これはバニラインストールのように、アプリサーバーに使用されるユーザーです。 クエリコンソールに使用されるユーザーはadminです。 ロード・ドキュメントの1つにxdmp:document-get-permissions()コマンドを実行しましたが、空のシーケンスが戻されました。 xdmp:document-get-permissions( "/ a-ha + Take-on-Me.xml")。 authentication-method = application-level – basari66

    +1

    document-get-permissionsの空のシーケンスを取得した場合、それらを挿入したユーザーは管理ユーザー(少なくとも1つの更新権限なしでドキュメントを挿入できる唯一のユーザー)です。 ..ここでの問題は、xyzユーザーのデフォルトのアクセス権ではありません(いいえの場合、後でそのユーザーがドキュメントを挿入するときに問題になります)。問題は、管理者ユーザーがドキュメントを挿入し、xyzユーザーに読み取り(および更新)権限を与えないことです。 –

    3

    ダビデは良い点を作ったが、私は何が起こっているか知っていると思いますapp-roleのために。少なくとも読み取りと更新の権限を適用し、多分実行することもできます。

    組み込みのデプロイコンテンツをカスタムコードで上書きし、load_dataなどのRoxy内部メソッドを使用しない場合は、これらのアクセス許可を自分で適用する必要があります。 xdmp:default-permissions()を使うと、デフォルトではRoxyがadminを使ってデプロイするので、通常はデフォルトの権限が定義されていないし、起こったアプリのapp-roleの読み込み/更新の権限もない一緒に働くこと。

    最も適切な方法は、アプリ固有のアップロードユーザーを正しいデフォルトの権限で使用することです。あなたはそれを自分で設定しなければならず、何とかRoxyがそれを使っていることを確かめなければなりません。

    簡単な方法アウトは$app-namesrc/app/config/config.xqy介してロードされるだろう、またはカスタムdeploy_contentからを通じて$app-nameを渡すところ$app-name || "-role"xyz-roleハードコードされた、またはそれ以上のいずれかのために、明示的なxdmp:permission通話であなたのloadTS:load機能でxdmp:default-permissions()を交換することです。

    HTH!

    +0

    根本的な問題は、セキュリティモデルを理解することです。 –

    +0

    xdmp:default-permissions()を {xdz:permission( "xyz-role"、 "read")}に置き換えました。はい、私はmarklogicのセキュリティモデルを理解する必要があります。たぶん、これは最善のアプローチではありませんでしたが、ワンショットで作業しました。 – basari66

    +0

    Roxyがどのように動作するかを理解するだけでなく、MarkLogicのセキュリティを理解しています。小さなステップは完全な理解にあなたを取得します.. – grtjn