2010-07-09 195 views
1

我們的程序附帶SQL Server 2005數據庫和SQL Server 2005 Express。通常它會在客戶端的計算機中安裝自己的SQL Server 2005實例。SQL Server:防止數據庫被直接更改

現在我不得不添加一些表格,其內容只能從程序中更新。我需要通過使用Management Studio來防止直接更改這些表。

我該如何做到這一點?我應該設置用戶權限嗎?我可以使用加密嗎?我想設置自己的'sa'密碼來訪問SQL Server實例並僅在程序中使用它,但是這並不會通過Windows身份驗證使其訪問失效。

[編輯]對我正在嘗試做什麼的一些澄清。該計劃是一項考勤計劃。員工的計時從時鐘收集並保存在數據庫中;一旦收集,這些時鐘不能被刪除,並且它們的日期和時間值不能被改變。所以我需要一種方法來防止用戶直接在數據庫中混淆這些值。

請記住,我們的大多數客戶沒有任何SQL經驗,所以我需要在程序安裝時設置這些權限。

[編輯2]謝謝您的回答,我想提出兩個有關這一主題的問題:

1 - 我只授予SELECT權限,對那些通過Windows身份驗證訪問數據庫?

2 - 通過哈希系統保護表格是否可以防止變化?就像添加一個哈希列併爲每一行計算一個哈希值,然後比較行數據和哈希值來檢查更改?

+1

你能解釋一下這個背景嗎?例如你是賣給企業還是個人?特別想要保護這些表的原因是什麼? – 2010-07-09 12:40:13

回答

4

如果任何人有sa級別的訪問權限,則無法阻止此操作。雖然常規用戶不應該有訪問權限。

您可以通過撥款將其與常規用戶隔離,例如,只允許應用程序用戶訪問INSERT,UPDATE,DELETE(或EXECUTE,如果您使用的是存儲過程而不是直接SQL),並且只允許其他用戶使用SELECT(或無)訪問權限。

你可以做一些其他的事情來減輕臨時用戶的負擔,也許在插入/更新/刪除時觸發器檢查來強制這些操作只能由你的應用程序用戶完成。我不會推薦它,但你可以做到。

+0

由於數據庫實例在*他們*機器上,所以普通用戶將具有訪問權限。 – 2010-07-09 12:29:11

+0

@Martin Smith:在企業領域,也許不是。本地管理員通常是受控的。但那爲什麼安裝express呢? – gbn 2010-07-09 12:30:25

+0

@gbn - 我假設(也許不正確)這是他們出售的產品,因此無法控制。 – 2010-07-09 12:32:00

3

您無法阻止本地管理員組的成員使用您的數據庫執行任何他們喜歡的任務。任何相反的要求是蛇油。在這個時代,所有需要的是一個一個無畏的用戶找到一種方式來改變數據(例如添加自己的時鐘時間),從此谷歌將確保用戶感興趣將發現黑客。

絕大多數用戶都是他們使用的機器上的管理員組的成員。即使是在最嚴格和嚴格的公司執行的組策略環境中,當涉及用戶的薪水時,也不會想到在用戶計算機上留下敏感數據。

在用戶有篡改數據的動機的情況下,在用戶計算機上設置防篡改數據存儲只是要求麻煩。集中存儲數據,使用Web服務收集數據。

0

您是否可以使用SQL Server Compact Edition而不是Express? 它被嵌入到應用程序中,並被設計用於這種場景。

0

您可以在行級別爲您的數據添加散列檢查,以便如果修改它,每夜運行的篡改檢查可以檢測到它並引發警報。

+0

是的,我想到了,我的問題是:如何檢測整行被刪除? – djeidot 2010-07-12 11:02:42

+0

@djeidot - 有另一行存儲表和相關的行數,並有防篡改哈希值以及... – cjk 2010-07-12 11:09:22