2

I'm building an stock exchange simulation game. I have a table called 'Market_data' and in the game players simulate being in particular dates and are allowed to use SQL queries to retrieve the historical data and plan their course of action. My difficulty is that I need to limit the rows they can access based on the current date they are playing on so they cant see rows with a date greater than the current date.

Eg: An user is running the game and is currently in the year 2010, if he does a simple select like "SELECT * FROM market_data" I don't want him to see rows with Date > 'x-x-2010'

The only soution that I know of is to parse the user's SQL and add WHERE clauses to remove newer dates but it seems time consuming and prone to errors and I wasn't sure whether there were better alternatives. Any ideas on how to do this right will be thanked.

4

3 に答える 3

4

解決策は SQL ビューです。ビューはいくつかの異なる理由で使用されます。

* 1. *データの複雑さを隠すため。ユーザーに T-SQL JOIN 構文の学習を強制する代わりに、一般的に要求される SQL ステートメントを実行するビューを提供したい場合があります。

* 2. * データを保護するため。特定の列に機密データを含むテーブルがある場合、それらの列を特定のユーザー グループから隠したい場合があります。たとえば、顧客の名前、住所、および社会保障番号がすべて同じテーブルに格納されている場合があります。ただし、配送員などの下位レベルの従業員の場合は、顧客の名前と住所のみを表示するビューを作成できます。ユーザーが基になるテーブルに対してクエリを実行できるようにすることなく、ビューにアクセス許可を付与できます。データを保護するには、いくつかの方法があります。

a. テーブルから特定の列のみを読み取ることができるビューを作成します。この一般的な例は、従業員テーブルの給与列です。すべての担当者がマネージャまたは互いの給与を読み取れるようにしたくない場合があります。これは、テーブルの垂直分割と呼ばれ、CREATE VIEW ステートメントで適切な列のみを指定することによって実現されます。

b. テーブルから特定の行のみを読み取ることができるビューを作成します。たとえば、部門管理者用のビューがあるとします。このようにして、各マネージャーは、自分の部門の従業員にのみ昇給を提供できます。これは水平分割と呼ばれ、ビューを作成する SELECT ステートメントに WHERE 句を指定することによって実現されます。

* 3. * いくつかの簡単なビジネス ルールの適用。たとえば、秋のカタログを受け取る必要がある顧客のリストを作成したい場合は、秋にシャツを以前に購入した顧客のビューを作成できます。

* 4. *データは BCP でエクスポートされます。BCP を使用して SQL Server データをテキスト ファイルにエクスポートする場合、BCP の書式設定機能はかなり制限されているため、ビューを使用してデータを書式設定できます。

* 5. *データのカスタマイズ。実表の列とは異なる形式で計算された値または列名を表示したい場合は、ビューを作成することで実行できます。

http://sqlserverpedia.comからの参照。

于 2013-06-03T05:02:18.707 に答える
1

1) mysql プロキシhttp://dev.mysql.com/downloads/mysql-proxy/を使用して、アクセスを制限するカスタム ルールを使用できます。

2)ストアドプロシージャ/関数を使用できます

3)ビューを使用できます

于 2013-06-03T05:25:33.040 に答える
0

基本的な方法は次のとおりです。

-> そのユーザー (またはグループ) がベース テーブルにアクセスできないようにします。

-> そのテーブルの上に、これらのユーザーが表示するはずの行のみを表示するビューを定義します。

-> それらのユーザーにビューに対する SELECT 権限を付与します。

-> また、SQL 暗号化、復号化、およびハッシュの概念も使用できます。

暗号化と復号化の例は、次の場所にあります。

http://msdn.microsoft.com/en-us/library/ms179331.aspx

ハッシュの例は次の場所にあります。

http://msdn.microsoft.com/en-us/library/ms174415.aspx

于 2013-06-03T05:59:12.727 に答える