2013-06-03 22 views
1

我正在建立一個股票交易所模擬遊戲。我有一張名爲「Market_data」的表格,遊戲玩家模擬特定日期,並允許使用SQL查詢來檢索歷史數據並計劃其行爲。我的困難是我需要根據當前播放的日期限制他們可以訪問的行,因此他們不能看到日期大於當前日期的行。我如何允許用戶sql訪問限於某些行的表?

例如:一個用戶正在運行的遊戲,目前在2010年,如果他做了簡單的選擇像"SELECT * FROM market_data"我不想讓他看到與日期行>「XX-2010」

的我知道的唯一解決辦法是解析用戶的SQL並添加WHERE子句以刪除更新的日期,但這似乎耗時且容易出錯,而且我不確定是否有更好的替代方法。任何有關如何做到這一點的想法都會得到感謝。

+0

抱歉,但你所說的X-X-2010是什麼意思?如果是2010-06-01這裏可以看到日期<= 2010-06-01或任何東西在2010年和下降? – medina

+0

你有什麼嘗試?這聽起來像你需要讓系統驗證SQL查詢並修改/修改where子句。如果有什麼可能需要構建像SQL選擇一樣的嚮導。 –

回答

3

解決方案是SQL視圖,視圖用於各種不同原因:

* 1. *要隱藏數據的複雜性。與其強迫用戶學習T-SQL JOIN語法,您可能希望提供一個運行常用請求的SQL語句的視圖。

* 2. *保護數據。如果您的表格包含特定列中的敏感數據,您可能希望隱藏某些用戶組的列。例如,客戶姓名,地址和他們的社會安全號碼可能都存儲在同一個表中;但是,對於像發貨員那樣的低級別員工,您可以創建僅顯示客戶姓名和地址的視圖。您可以授予視圖權限,而不允許用戶查詢基礎表。有幾種方法可能希望保護您的數據:

a。創建一個視圖,以便只讀取表中的某些列。一個常見的例子就是員工表中的工資欄。你可能不希望所有人員都能夠閱讀經理或對方的薪水。這被稱爲垂直分區表,並通過在CREATE VIEW語句中僅指定適當的列來完成。

b。創建一個視圖,允許只讀取表中的某些行。例如,您可能有部門經理的看法。這樣,每位經理只能向其部門的員工提出提案。這被稱爲水平分區,並通過在創建視圖的SELECT語句中提供WHERE子句來完成。

* 3. *執行一些簡單的業務規則。例如,如果您希望生成需要接收秋季目錄的客戶列表,則可以創建一個客戶的視圖,這些客戶以前曾在秋季購買過襯衫。

* 4. *使用BCP導出數據。如果您使用BCP將SQL Server數據導出到文本文件中,則可以通過視圖格式化數據,因爲BCP的格式化功能非常有限。

* 5. *定製數據。如果您希望顯示一些格式不同於基本表列的計算值或列名,您可以通過創建視圖來完成。

參考文獻取自http://sqlserverpedia.com

0

的基本方法是:

- >訪問所述基座防止用戶(或組)表。

- >在該表的頂部定義一個視圖,該視圖僅顯示這些用戶應該看到的行。

- >給這些用戶在視圖上的SELECT權限。

- >你也可以使用SQL Encryption,Decryption和Hashing概念。

加密&解密的例子可以在這裏找到:

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

散列例如可以在這裏找到:

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

相關問題