成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從數據行入手保護SQL Server數據安全

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

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

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

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

--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

行級別安全代碼范例

首先我們作出如下假設:

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

◆所有表中都有一個共同的字段,使用它來決定誰可以看什么數據(本例中就是department字段)

◆通過不同的用戶id來加強應用程序調用數據庫的安全性,而不是通過一個單一的admin用戶id。

舉例來說,圖1所示數據結構包含:Orders表,包含一個客戶名稱、訂單收入和銷售部門;一個部門查閱表(Departments),包含父部門字段;一個用戶訪問表(UserAccess),在用戶和他有權限查看的部門之間建立聯系。用戶訪問表的每一行數據代表一個正確的用戶/部門組合。如果一個用戶有權限訪問的部門下設許多子部門,那么這個父部門和每一個子部門在表中各占據一行數據。

圖1 該數據庫模型圖顯示了本例中所用到的表

讓訂單數據保持安全的關鍵是,通過SQL Server的表值型函數來保護它,該函數要求使用當前用戶的id作為參數。表值型函數與其它函數一樣可以接受參數,但是返回結果為一個表,而并非一個變量。在這個函數內,通過其安全屬性聯合要保護的表與用戶訪問表,將表的結果限定在與指定用戶id相關的范圍之內。

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

示例1:創建保護訂單數據的表值型函數的SQL語句

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顯示了該函數的執行示例,以及相關表的數據內容,如表1、表2和表3.

 

圖2 表值型函數執行示例

 

表1 UserAccess示例表內容

 

表2 Orders示例表內容

  

表3 Department表內容

顯示受保護表內容

通過表值型函數保護了某個表之后,你然后可以通過類似示例2的視圖將其展示給用戶。該視圖調用了上面定義的表值型函數,并使用參數“user”,在SQL Server中這是一個內置函數,返回當前活躍用戶的ID。

示例2:創建一個視圖讓安全用戶訪問受保護表的SQL

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

這個視圖是用戶被授予訪問權限的唯一對象,即使用戶不具有權限使用前面的表值型函數或訪問受保護表,他也可以獲得被許可查看的數據。

實際應用思考

在應用程序開發實際情況中,這種方式往往需要一個以上的屬性來定義用戶行級別權限,而且往往需要對多個表應用安全機制。

另外,不同的數據可能具有不同的安全考慮。舉例來說,一個用戶可能有權限訪問某個區域的銷售結果,但不能訪問匯總薪酬數據。在復雜的實際環境中成功運用這個戰略的關鍵是,收集并確認來自業務的需求,然后根據這些需求來選擇合適的屬性來實施行級別安全。

使用活動目錄的企業,可以按照活動目錄組來使用這種方式獲得安全性,而并一定僅限于使用用戶ID,實現方法非常簡單,只需要在UserAccess表中使用活動目錄組替代用戶ID即可。

相關閱讀

薩班斯-奧克斯利法案(Sarbanes-Oxley Act)是美國立法機構根據安然有限公司、世界通訊公司等財務欺詐事件破產暴露出來的公司和證券監管問題所立的監管法規,簡稱《SOX法案》或《索克思法案》。

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

【編輯推薦】

  1. 通過事務日志解決SQL Server常見四大故障
  2. SQL Server 2005常見問題淺析
  3. SQL Server數據庫內容替換方法
責任編輯:彭凡 來源: ITPUB
相關推薦

2009-03-09 10:41:49

2011-05-24 10:18:09

2011-04-06 16:51:59

Windows Ser數據安全

2010-09-14 14:53:35

2011-03-31 10:52:13

2023-12-05 18:50:24

騰訊安全HaS大模型

2021-04-16 10:31:56

數據數據安全個人信息安全

2010-09-17 20:40:09

2022-03-23 18:57:11

數據安全安全工具

2013-04-15 09:15:09

BitLocker數據安全加密

2011-05-18 09:56:15

2023-10-23 10:39:05

2009-04-16 18:25:55

2013-04-15 11:04:48

2022-11-07 12:22:00

2012-11-02 13:44:24

2021-12-23 13:51:24

數據安全網絡安全容器

2020-04-06 13:50:43

數據安全大數據5G

2022-09-08 15:18:03

數據安全犯罪

2011-03-31 10:30:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕高清av | 国产欧美在线观看 | 日韩欧美在线不卡 | 午夜伊人 | 蜜臀久久99精品久久久久野外 | 综合久久色 | 日本aⅴ中文字幕 | 久久亚洲一区二区 | a在线视频 | 三级av在线 | 999久久久 | 免费在线观看91 | 欧美视频一区二区三区 | 亚洲视频国产视频 | 亚洲欧美综合精品久久成人 | 久操亚洲| 日本在线小视频 | 五月婷婷 六月丁香 | 国产精品国产精品国产专区不片 | 日本综合在线观看 | 成人av免费 | 久久久久国产一区二区三区 | 草久久| 国产精品一区二区三区在线 | 欧美日韩在线国产 | 九九热精品视频在线观看 | 亚洲精品一区二三区不卡 | 最新中文字幕在线 | 午夜丰满少妇一级毛片 | a a毛片 | 国产精品99久久久久久www | 成人av播放| 色网站视频 | 国产美女福利在线观看 | 久久久精| 99综合在线 | 一级全黄少妇性色生活免费看 | 91精品中文字幕一区二区三区 | 人人艹人人爽 | 精品欧美一区二区三区久久久小说 | 欧美视频一区 |