操作系統集成安全性()
在第一個計算機數據庫發明之前OS就已經存在了記住這一點很重要沒有任何RDBMS能在沒有OS的支持下運行每一種OS都具有自己的一套安全機制本書所討論的所有RDBMS在某種程度上都提供了與運行這些RDBMS的OS的安全集成從本質上講可以直接使用OS賬戶和特權來訪問數據庫而無須依賴於RDBMS
例如Microsoft SQL Server 具有緊密集成OS的安全性對於具有有效Windows賬戶的用戶允許根據他們的Windows NT//XP憑據進行身份驗證采用Windows身份驗證的用戶無須提供獨立的用戶ID和密碼只要他登錄了運行RDBMS的計算機就可以自動地訪問SQLServer
其他RDBMS將該功能擴展到了多個操作系統對於不同的系統實現的細節和用法也有所差異
運行在某些操作系統(特別是Windows x)上的RDBMS不具有OS集成的安全性因為這些OS本身沒有提供這樣的功能
使用視圖提供安全性
SQL視圖是用來實現安全性的機制之一視圖可以限制用戶所能訪問的數據或者限制用戶所能執行的操作類型也可以同時對兩者進行限制
請考慮下面的DDL SQL語句該語句非常通用可以被所有RDBMS接受
CREATE VIEW vw_SingleTable
AS
SELECT
bk_publisher AS Publisher
bk_title AS Title
bk_pub_year AS Year_of_Publication
FROM books
BOOKS表中總共包含了個字段但該視圖僅從表中選取了個字段這也稱為縱向限制因為它將訪問范圍限制為列(字段)的一個子集其他列可能包含了不想讓用戶看到的機密信息如果將該視圖的SELECT特權授予某個角色(例如friends角色)則屬於該角色的每一個用戶都可以看到視圖中的信息BOOKS表中的其余信息對於這些用戶則保持不可訪問狀態
通過聲明行的子集還可以為數據提供橫向的限制例如你可能想授予訪問歷史數據(即那些在一年或更早之前輸入到表中的記錄)的特權並禁止對該日期之後添加的數據進行訪問如果使用LIBRARY數據庫的例子假設想快速而簡單地訪問價格低於某一標准例如美元的圖書那麼可以使用下面的代碼這些SQL語法對於所有RDBMS都是可用的
CREATE VIEW vw_cheap_books
AS
SELECT *
FROM books
WHERE bk_price <
從該視圖中選取數據將僅僅返回那些價格低於美元的圖書
當然在單個視圖中可以同時結合縱向和橫向的選取限制
在視圖中還可以實現其他方面的限制即使用WHERE子句和JOIN條件當在視圖中涉及多個表時這兩個子句是非常有用的例如可以限制視圖使之僅顯示所著圖書的售價低於美元的作者
SELECT DISTINCT bkbk_title baau_last_name
FROM books bk
JOIN
books_authors ba
ON bkbk_id= babk_id
JOIN
authors au
ON baau_id = auau_id
WHERE
Bkbk_price <
視圖不僅可用於SELECT語句而且也可用於UPDATE INSERT和DELETE語句其中一些操作由視圖對象固有的屬性所支配另外一些操作則可以在創建該視圖對象時聲明例如如果在創建視圖時使用了聚合函數則無法向視圖更新或插入數據試圖執行這些操作將產生一個錯誤這是視圖固有的行為另一方面對於可更新視圖可以創建一個約束根據某些標准接受或拒絕對數據的修改
試一試使用SQL視圖限制數據訪問
在下面的練習中將創建一個視圖限制用戶僅能查看到當前年份之前輸入的圖書記錄在這個例子中采用了Microsoft SQL Server 請參考wwwwroxcom或者wwwagilitatorcom網站以了解針對你所使用的特定RDBMS的例子
() 打開Microsoft SQL Server的Query Analyzer
() 在SQL Query窗格中輸入USE [library]作為第一條語句
() 輸入下面的代碼
CREATE VIEW vwLastYearBooks AS
SELECT * FROM books where EXTRACT(PublishingDate YEAR) < EXTRACT
(GetDate() YEAR)
GO
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16440.html