自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從數(shù)據(jù)行入手保護(hù)SQL Server數(shù)據(jù)安全

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維 SQL Server
保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的安全已成為數(shù)據(jù)庫(kù)管理員們工作的重中之重了,本文將介紹如何從命令行入手,保護(hù)SQL Server數(shù)據(jù)安全。

在當(dāng)今企業(yè)環(huán)境中,保證數(shù)據(jù)安全不是可有可無(wú)的工作。頻繁曝光的入侵和欺騙事件、薩班斯◆奧克斯利法案、HIPAA法案規(guī)定和愛(ài)國(guó)者法案等都要求我們能夠做到,將正確數(shù)據(jù)提供給正確的用戶,防止其它無(wú)權(quán)限的人訪問(wèn)。一般來(lái)說(shuō),“行級(jí)安全(row-level security)”的要求是:對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)以行為單位,設(shè)定只有特定用戶才可以訪問(wèn)??上У氖?,SQL Server數(shù)據(jù)庫(kù)并不提供內(nèi)置的行級(jí)別安全機(jī)制。

在本篇文章中,通過(guò)一個(gè)示例代碼(代碼清單1),來(lái)告訴大家一個(gè)在SQL Server中實(shí)現(xiàn)行級(jí)別安全的方法,以行為單位限定用戶的訪問(wèn)權(quán)限,同時(shí)無(wú)需修改業(yè)務(wù)表的內(nèi)容,不影響應(yīng)用程序或表現(xiàn)層開(kāi)發(fā)者,而且與用戶訪問(wèn)數(shù)據(jù)的方式無(wú)關(guān)。該示例應(yīng)用的模擬需求為:如何增加安全性到現(xiàn)有訂單數(shù)據(jù)庫(kù)中,限制經(jīng)理只能訪問(wèn)他們管理的部門(mén)或其子部門(mén)的數(shù)據(jù),而不管用戶如何獲得該表,以及針對(duì)這個(gè)數(shù)據(jù)庫(kù)開(kāi)發(fā)什么樣的報(bào)表和查詢。

代碼清單1:提供了創(chuàng)建和加載示例表的腳本

--create table script
CREATE TABLE dbo.UserAccess
(
UserID varchar(20) NOT NULL,
Department varchar(50) NOT NULL
)
CREATE TABLE [dbo].[Orders](
[OrderID] [int] NOT NULL,
[CustomerName] [varchar](20) NOT NULL,
[OrderTotal] [money] NOT NULL,
[Department] [varchar](50) NOT NULL
)
CREATE TABLE dbo.Departments
(
Department varchar(50) NOT NULL,
ParentDepartment varchar(50)
)
--end create table script

--script to clear then populate example tables

--clear tables
Delete from departments
Delete from orders
Delete from useraccess

--insert departments table
INSERTINTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('North America','')
INSERT INTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('East','North America')
INSERT INTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('Southeast','East')
INSERT INTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('Northeast','East')
INSERT INTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('West','North America')
INSERT INTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('Southwest','West')
INSERT INTO [dbo].[Departments] ([Department],[ParentDepartment]) VALUES ('Northwest','West')

--insert orders table
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (1,'Harris','11.00','East')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (2,'Corrigan','22.00','Southeast')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (2,'Corrigan','22.00','Southeast')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (3,'Baldwin','33.00','Southeast')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (4,'Pillow','44.00','Northeast')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (5,'Carpenter','55.00','Northeast')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (6,'Meyer','66.00','West')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (7,'Gonzalez','77.00','Southwest')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (8,'Hall','88.00','Northwest')
INSERT INTO [dbo].[Orders] ([OrderID],[CustomerName],[OrderTotal],[Department]) VALUES (9,'Patrick','99.00','Southwest')

--insert user access table
INSERT INTO [dbo].[UserAccess] ([UserID],[Department]) VALUES ('BLambert','Southwest')
INSERT INTO [dbo].[UserAccess] ([UserID],[Department]) VALUES ('MDavis','East')
INSERT INTO [dbo].[UserAccess] ([UserID],[Department]) VALUES ('MDavis','Southeast')
INSERT INTO [dbo].[UserAccess] ([UserID],[Department]) VALUES ('MDavis','Northeast')
INSERT INTO [dbo].[UserAccess] ([UserID],[Department]) VALUES ('WSimmons','Northeast')

--end script to clear then populate example tables

行級(jí)別安全代碼范例

首先我們作出如下假設(shè):

◆使用SQL Server數(shù)據(jù)庫(kù)(微軟SQL Server 2000、2005或2008)

◆所有表中都有一個(gè)共同的字段,使用它來(lái)決定誰(shuí)可以看什么數(shù)據(jù)(本例中就是department字段)

◆通過(guò)不同的用戶id來(lái)加強(qiáng)應(yīng)用程序調(diào)用數(shù)據(jù)庫(kù)的安全性,而不是通過(guò)一個(gè)單一的admin用戶id。

舉例來(lái)說(shuō),圖1所示數(shù)據(jù)結(jié)構(gòu)包含:Orders表,包含一個(gè)客戶名稱、訂單收入和銷(xiāo)售部門(mén);一個(gè)部門(mén)查閱表(Departments),包含父部門(mén)字段;一個(gè)用戶訪問(wèn)表(UserAccess),在用戶和他有權(quán)限查看的部門(mén)之間建立聯(lián)系。用戶訪問(wèn)表的每一行數(shù)據(jù)代表一個(gè)正確的用戶/部門(mén)組合。如果一個(gè)用戶有權(quán)限訪問(wèn)的部門(mén)下設(shè)許多子部門(mén),那么這個(gè)父部門(mén)和每一個(gè)子部門(mén)在表中各占據(jù)一行數(shù)據(jù)。

圖1 該數(shù)據(jù)庫(kù)模型圖顯示了本例中所用到的表

讓訂單數(shù)據(jù)保持安全的關(guān)鍵是,通過(guò)SQL Server的表值型函數(shù)來(lái)保護(hù)它,該函數(shù)要求使用當(dāng)前用戶的id作為參數(shù)。表值型函數(shù)與其它函數(shù)一樣可以接受參數(shù),但是返回結(jié)果為一個(gè)表,而并非一個(gè)變量。在這個(gè)函數(shù)內(nèi),通過(guò)其安全屬性聯(lián)合要保護(hù)的表與用戶訪問(wèn)表,將表的結(jié)果限定在與指定用戶id相關(guān)的范圍之內(nèi)。

示例1定義了一個(gè)表值型函數(shù),根據(jù)UserAccess表中的限制用戶可以查看的內(nèi)容,返回訂單數(shù)量和訂單的總收入。

示例1:創(chuàng)建保護(hù)訂單數(shù)據(jù)的表值型函數(shù)的SQL語(yǔ)句

CREATE FUNCTION [dbo].[GetOrderSummary] 
(
@User_Id VARCHAR(20)
)
RETURNS TABLE
AS
RETURN
(
SELECTcount(*) as OrderCount,
 sum(OrderTotal) as Receipts
FROMdbo.Orderso
Joindbo.UserAccess ua
Ono.Department = ua.Department
WHERE ua.UserID = @User_Id
)

而圖2顯示了該函數(shù)的執(zhí)行示例,以及相關(guān)表的數(shù)據(jù)內(nèi)容,如表1、表2和表3.

 

圖2 表值型函數(shù)執(zhí)行示例

 

表1 UserAccess示例表內(nèi)容

 

表2 Orders示例表內(nèi)容

  

表3 Department表內(nèi)容

顯示受保護(hù)表內(nèi)容

通過(guò)表值型函數(shù)保護(hù)了某個(gè)表之后,你然后可以通過(guò)類(lèi)似示例2的視圖將其展示給用戶。該視圖調(diào)用了上面定義的表值型函數(shù),并使用參數(shù)“user”,在SQL Server中這是一個(gè)內(nèi)置函數(shù),返回當(dāng)前活躍用戶的ID。

示例2:創(chuàng)建一個(gè)視圖讓安全用戶訪問(wèn)受保護(hù)表的SQL

CREATE VIEW[dbo].[OrderSummary]
AS
SELECTOrderCount,
Receipts
FROMdbo.GetOrderSummary(USER)

這個(gè)視圖是用戶被授予訪問(wèn)權(quán)限的唯一對(duì)象,即使用戶不具有權(quán)限使用前面的表值型函數(shù)或訪問(wèn)受保護(hù)表,他也可以獲得被許可查看的數(shù)據(jù)。

實(shí)際應(yīng)用思考

在應(yīng)用程序開(kāi)發(fā)實(shí)際情況中,這種方式往往需要一個(gè)以上的屬性來(lái)定義用戶行級(jí)別權(quán)限,而且往往需要對(duì)多個(gè)表應(yīng)用安全機(jī)制。

另外,不同的數(shù)據(jù)可能具有不同的安全考慮。舉例來(lái)說(shuō),一個(gè)用戶可能有權(quán)限訪問(wèn)某個(gè)區(qū)域的銷(xiāo)售結(jié)果,但不能訪問(wèn)匯總薪酬數(shù)據(jù)。在復(fù)雜的實(shí)際環(huán)境中成功運(yùn)用這個(gè)戰(zhàn)略的關(guān)鍵是,收集并確認(rèn)來(lái)自業(yè)務(wù)的需求,然后根據(jù)這些需求來(lái)選擇合適的屬性來(lái)實(shí)施行級(jí)別安全。

使用活動(dòng)目錄的企業(yè),可以按照活動(dòng)目錄組來(lái)使用這種方式獲得安全性,而并一定僅限于使用用戶ID,實(shí)現(xiàn)方法非常簡(jiǎn)單,只需要在UserAccess表中使用活動(dòng)目錄組替代用戶ID即可。

相關(guān)閱讀

薩班斯-奧克斯利法案(Sarbanes-Oxley Act)是美國(guó)立法機(jī)構(gòu)根據(jù)安然有限公司、世界通訊公司等財(cái)務(wù)欺詐事件破產(chǎn)暴露出來(lái)的公司和證券監(jiān)管問(wèn)題所立的監(jiān)管法規(guī),簡(jiǎn)稱《SOX法案》或《索克思法案》。

法案全稱《2002年公眾公司會(huì)計(jì)改革和投資者保護(hù)法案》由參議院銀行委員會(huì)主席薩班斯(Paul Sarbanes)和眾議院金融服務(wù)委員會(huì)(Committee on Financial Services)主席奧克斯利(Mike Oxley)聯(lián)合提出,又被稱作《2002年薩班斯-奧克斯利法案》。該法案對(duì)美國(guó)《1933年證券法》、《1934年證券交易法》做出大幅修訂,在公司治理、會(huì)計(jì)職業(yè)監(jiān)管、證券市場(chǎng)監(jiān)管等方面作出了許多新的規(guī)定。

【編輯推薦】

  1. 通過(guò)事務(wù)日志解決SQL Server常見(jiàn)四大故障
  2. SQL Server 2005常見(jiàn)問(wèn)題淺析
  3. SQL Server數(shù)據(jù)庫(kù)內(nèi)容替換方法
責(zé)任編輯:彭凡 來(lái)源: ITPUB
相關(guān)推薦

2011-05-24 10:18:09

2009-03-09 10:41:49

2011-03-31 10:52:13

2010-09-14 14:53:35

2011-04-06 16:51:59

Windows Ser數(shù)據(jù)安全

2023-12-05 18:50:24

騰訊安全HaS大模型

2010-09-17 20:40:09

2021-04-16 10:31:56

數(shù)據(jù)數(shù)據(jù)安全個(gè)人信息安全

2013-04-15 11:04:48

2009-04-16 18:25:55

2023-10-23 10:39:05

2013-04-15 09:15:09

BitLocker數(shù)據(jù)安全加密

2022-03-23 18:57:11

數(shù)據(jù)安全安全工具

2011-05-18 09:56:15

2022-11-07 12:22:00

2010-03-05 09:27:07

SQL Server

2011-03-03 13:43:29

2012-03-30 17:18:29

SQL Server

2022-09-08 15:18:03

數(shù)據(jù)安全犯罪

2023-11-29 09:53:29

數(shù)據(jù)庫(kù)遷移SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)