Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

ความปลอดภัยระดับแถวใน SQL Server 2016

Microsoft® ให้ความสำคัญกับความปลอดภัยใน SQL Server® และเกือบทุกรุ่นมีการปรับปรุงคุณลักษณะที่มีอยู่หรือได้แนะนำคุณลักษณะด้านความปลอดภัยใหม่ ใน SQL Server 2016 Microsoft ได้เปิดตัวฟีเจอร์ความปลอดภัยใหม่มากมายที่ช่วยให้ผู้ใช้ปกป้องข้อมูลของตนได้ ซึ่งรวมถึง Row-Level Security, AlwaysEncrypted และ Dynamic Data Masking

แนะนำตัว

ในบล็อกที่แล้ว ฉันเขียนเกี่ยวกับการปิดบังข้อมูลแบบไดนามิกใน SQL Server 2016 ในบล็อกนี้ ฉันแนะนำคุณลักษณะ Row-Level Security (RLS) ซึ่งช่วยให้คุณควบคุมได้ว่าผู้ใช้รายใดสามารถเข้าถึงแถวในตารางได้ RLS ช่วยให้คุณดำเนินการจำกัดข้อมูลตามลักษณะของผู้ใช้ที่กำลังดำเนินการค้นหา RLS ช่วยให้คุณควบคุมการเข้าถึงข้อมูลได้อย่างง่ายดายด้วยความโปร่งใสสำหรับผู้ใช้ที่แตกต่างกัน

ความต้องการ RLS

มีบางครั้งที่เราจำเป็นต้องส่งคืนเฉพาะข้อมูลที่เลือกไปยังผู้ใช้ที่ได้รับการคัดเลือก ในอดีต เราทำโดยการสร้างมุมมองและให้สิทธิ์ผู้ใช้เลือกการอนุญาตในมุมมองเหล่านั้น อย่างไรก็ตาม วิธีการดังกล่าวไม่สามารถจัดการได้ด้วยจำนวนการดูที่จำเป็นเพื่อรองรับปริมาณข้อมูลที่เพิ่มขึ้นและจำนวนผู้ใช้ ดังนั้น Microsoft จึงแนะนำ RLS เพื่อให้เป็นไปตามข้อกำหนดด้านความปลอดภัยในสถานการณ์ใหม่

RLS ช่วยให้สามารถควบคุมการเข้าถึงแถวในตารางได้อย่างละเอียด ทำให้คุณควบคุมได้อย่างง่ายดายว่าผู้ใช้รายใดสามารถเข้าถึงข้อมูลใดของแอปพลิเคชันได้ด้วยความโปร่งใสอย่างสมบูรณ์

ด้วยคุณลักษณะนี้ แถวจะถูกกรองตามบริบทการดำเนินการของแบบสอบถาม แทนที่จะเป็นสิทธิ์การเข้าถึงของผู้ใช้ปัจจุบัน คุณสามารถสร้างกฎตรรกะที่ปลอดภัยเพื่อกำหนดว่าผู้ใช้รายใดสามารถดูแถวใดและจำกัดแถว (หรือข้อมูล) โดยการออกแบบนโยบายความปลอดภัยที่ยืดหยุ่นและมีประสิทธิภาพสำหรับตารางดังที่แสดงในภาพต่อไปนี้:

ความปลอดภัยระดับแถวใน SQL Server 2016

ที่มาของรูปภาพ: https://sqlwithmanoj.com/2015/07/13/implementing-row-level-security-rls-with-sql-server-2016/

คุณสมบัติ RLS

RLS มีคุณสมบัติดังต่อไปนี้:

  • บทบาทการเข้าถึงแบบละเอียด (ควบคุมทั้งการเข้าถึงแบบอ่านและเขียนสำหรับแถวที่ระบุ)
  • ความโปร่งใสของแอปพลิเคชัน (ไม่จำเป็นต้องเปลี่ยนแปลงแอปพลิเคชัน)
  • รวมศูนย์การเข้าถึงภายในฐานข้อมูล
  • ง่ายต่อการใช้งานและบำรุงรักษา

วิธีการทำงานของ RLS

ในการนำ RLS ไปใช้ คุณต้องพิจารณาองค์ประกอบต่อไปนี้:

  • ฟังก์ชันเพรดิเคต
  • ภาคแสดงการรักษาความปลอดภัย
  • นโยบายความปลอดภัย

ส่วนต่อไปนี้จะอธิบายรายการเหล่านี้

ฟังก์ชันเพรดิเคต

ฟังก์ชันเพรดิเคตคือฟังก์ชันค่าตารางในบรรทัดที่ตรวจสอบว่า auser ดำเนินการแบบสอบถามมีสิทธิ์เข้าถึงข้อมูลตามตรรกะที่กำหนดไว้หรือไม่ ฟังก์ชันนี้ส่งคืน 1 สำหรับแต่ละแถวที่ผู้ใช้สามารถเข้าถึงได้

เพรดิเคตความปลอดภัย

เพรดิเคตความปลอดภัยช่วยในการโยงฟังก์ชันเพรดิเคตกับตาราง RLS รองรับเพรดิเคตการรักษาความปลอดภัยสองประเภท:เพรดิเคตตัวกรองและเพรดิเคตแบบบล็อก เพรดิเคตตัวกรองจะกรองข้อมูลโดยไม่แสดงข้อผิดพลาดใดๆ สำหรับการดำเนินการต่อไปนี้ตามตรรกะที่กำหนดไว้ในฟังก์ชันเพรดิเคต

  • SELECT
  • UPDATE
  • DELETE

เพรดิเคตบล็อกทำให้เกิดข้อผิดพลาดอย่างชัดเจนและบล็อกผู้ใช้จากการดำเนินการต่อไปนี้กับข้อมูลที่ละเมิดตรรกะของฟังก์ชันเพรดิเคต:

  • AFTER INSERT
  • AFTER UPDATE
  • BEFORE UPDATE
  • BEFORE DELETE

นโยบายความปลอดภัย

ออบเจ็กต์นโยบายความปลอดภัยจะถูกสร้างขึ้นสำหรับ RLS ซึ่งจัดกลุ่มการรักษาความปลอดภัยทั้งหมดที่อ้างถึงฟังก์ชันเพรดิเคต

กรณีการใช้งาน

ต่อไปนี้คือตัวอย่างการออกแบบบางส่วนของวิธีใช้ RLS:

  • โรงพยาบาลสามารถสร้างนโยบายความปลอดภัยที่อนุญาตให้พยาบาลดูแถวข้อมูลสำหรับผู้ป่วยได้เท่านั้น
  • ธนาคารสามารถสร้างนโยบายเพื่อจำกัดการเข้าถึงแถวข้อมูลทางการเงินตามแผนกธุรกิจของพนักงานหรือบทบาทของบริษัท
  • แอปพลิเคชันหลายผู้เช่าสามารถสร้างนโยบายเพื่อบังคับใช้การแยกทางตรรกะของแถวข้อมูลของผู้เช่าแต่ละรายจากแถวของผู้เช่ารายอื่นทุกแถว เนื่องจากผู้เช่า data formany ถูกเก็บไว้ในตารางเดียว กระบวนการจึงมีประสิทธิภาพมากขึ้น ผู้เช่าแต่ละรายสามารถดูได้เฉพาะแถวข้อมูลเท่านั้น

ใช้ RLS

ต่อไปนี้เป็นตัวอย่างวิธีการใช้ RLS:

ขั้นตอนที่ 1:เรียกใช้รหัสต่อไปนี้เพื่อสร้างฐานข้อมูล RowFilter และผู้ใช้สองคนที่จะทดสอบด้วย:

CREATE DATABASE RowFilter;
GO
USE RowFilter;
GO
CREATE USER userBrian WITHOUT LOGIN;
CREATE USER userJames WITHOUT LOGIN;
GO

ขั้นตอนที่ 2:เรียกใช้รหัสต่อไปนี้เพื่อสร้างตารางพร้อมตัวอย่างและให้สิทธิ์ SELECT แก่ผู้ใช้ใหม่:

CREATE TABLE dbo.SalesFigures (
[userCode] NVARCHAR(10),
[sales] MONEY)
GO
INSERT  INTO dbo.SalesFigures
VALUES ('userBrian',100), ('userJames',250), ('userBrian',350)
GO
GRANT SELECT ON dbo.SalesFigures TO userBrian
GRANT SELECT ON dbo.SalesFigures TO userJames
GO

ขั้นตอนที่ 3:เรียกใช้โค้ดต่อไปนี้เพื่อเพิ่มฟังก์ชันเพรดิเคตตัวกรอง:

CREATE FUNCTION dbo.rowLevelPredicate (@userCode as sysname)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS rowLevelPredicateResult
WHERE @userCode = USER_NAME();
GO

ขั้นตอนที่ 4:เรียกใช้โค้ดต่อไปนี้เพื่อเพิ่มเพรดิเคตตัวกรองลงในตารางdbo.Sales Figures :

CREATE SECURITY POLICY UserFilter
ADD FILTER PREDICATE dbo.rowLevelPredicate(userCode)
ON dbo.SalesFigures
WITH (STATE = ON);
GO

ขั้นตอนที่ 5:เรียกใช้รหัสต่อไปนี้เพื่อทดสอบผลลัพธ์กับผู้ใช้ที่เพิ่มในขั้นตอนที่ 2:

EXECUTE AS USER = 'userBrian';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO

รหัสนี้ส่งคืนสองแถวดังที่แสดงด้านล่าง:

ความปลอดภัยระดับแถวใน SQL Server 2016 (/article/uploadfiles/202207/2022070812111051.png)

EXECUTE AS USER = 'userJames';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO

รหัสนี้ส่งคืนหนึ่งแถวดังที่แสดงด้านล่าง:

ความปลอดภัยระดับแถวใน SQL Server 2016 (/article/uploadfiles/202207/2022070812111024.png)

การอนุญาต

การสร้าง แก้ไข หรือยกเลิกนโยบายการรักษาความปลอดภัยต้องมี แก้ไขนโยบายความปลอดภัย ขออนุญาต

การสร้างหรือวางนโยบายความปลอดภัยต้องใช้ ALTER อนุญาตในสคีมา

นอกจากนี้ เพรดิเคตแต่ละเพรดิเคตต้องการการอนุญาตต่อไปนี้ ซึ่งถูกเพิ่ม:

  • การ เลือก และข้อมูลอ้างอิง สิทธิ์ในฟังก์ชันที่ใช้ asa เพรดิเคต
  • ข้อมูลอ้างอิง อนุญาตบนตารางเป้าหมายที่ผูกไว้กับนโยบาย
  • ข้อมูลอ้างอิง การอนุญาตในทุกคอลัมน์จากตารางเป้าหมายใช้อาร์กิวเมนต์

นโยบายความปลอดภัยนำไปใช้กับผู้ใช้ทุกคน รวมถึงผู้ใช้ฐานข้อมูล (DBO) ในฐานข้อมูล ผู้ใช้ DBO สามารถเปลี่ยนแปลงหรือยกเลิกนโยบายความปลอดภัยได้ อย่างไรก็ตาม สามารถตรวจสอบการเปลี่ยนแปลงนโยบายความปลอดภัยได้ กรณีผู้ใช้ที่มีสิทธิพิเศษสูง เช่น sysadmin หรือ db_owner คุณต้องดูแถวทั้งหมดเพื่อแก้ไขปัญหาหรือตรวจสอบข้อมูล ดังนั้นคุณต้องเขียนนโยบายความปลอดภัยเพื่ออนุญาต

หากนโยบายความปลอดภัยถูกสร้างขึ้นด้วย SCHEMABINDING = OFF ดังนั้นผู้ใช้จะต้องมีSELECT หรือ EXECUTE การอนุญาตบนฟังก์ชันเพรดิเคตและตารางเพิ่มเติม มุมมอง หรือฟังก์ชันใดๆ ที่ใช้ภายในฟังก์ชันเพรดิเคตเพื่อค้นหาตารางเป้าหมาย หากนโยบายความปลอดภัยถูกสร้างขึ้นด้วย SCHEMABINDING = ON ซึ่งเป็นค่าเริ่มต้น การตรวจสอบสิทธิ์เหล่านี้จะถูกข้ามไปเมื่อผู้ใช้ค้นหาตารางเป้าหมาย

กำลังแก้ไข SQL Server 2016 RLS

ดำเนินการต่อไปนี้เพื่อปิดใช้งาน SQL Server RLS สำหรับนโยบาย:

  • แก้ไขนโยบายความปลอดภัย UseFilter ด้วย State = off .

ดำเนินการดังต่อไปนี้เพื่อยกเลิกตัวกรองและนโยบายความปลอดภัย:

  • วางนโยบายความปลอดภัย UseFilter .
  • ฟังก์ชันวาง dbo.rowlevelPredicate .

แนวทางปฏิบัติที่ดีที่สุด

Microsoft แนะนำแนวทางปฏิบัติที่ดีที่สุดเหล่านี้:

  • เราขอแนะนำให้คุณสร้างสคีมาแยกต่างหากสำหรับออบเจ็กต์ RLS (ฟังก์ชันเพรดิเคตและนโยบายความปลอดภัย)
  • แก้ไขนโยบายความปลอดภัยใดๆ การอนุญาตมีไว้สำหรับผู้ใช้ที่มีสิทธิพิเศษสูง (เช่น ผู้จัดการนโยบายความปลอดภัย) ตัวจัดการนโยบายความปลอดภัยไม่ต้องการ เลือก ได้รับอนุญาตบนโต๊ะที่พวกเขาปกป้อง
  • หลีกเลี่ยงการแปลงประเภทในฟังก์ชันเพรดิเคตเพื่อหลีกเลี่ยงข้อผิดพลาดรันไทม์ที่อาจเกิดขึ้น
  • หลีกเลี่ยงการเรียกซ้ำในฟังก์ชันเพรดิเคตทุกที่ที่ทำได้เพื่อหลีกเลี่ยงการลดประสิทธิภาพ ตัวเพิ่มประสิทธิภาพแบบสอบถามพยายามตรวจหาการเรียกซ้ำโดยตรง อย่างไรก็ตาม ไม่รับประกันว่าจะพบการเรียกซ้ำทางอ้อม (เช่น เมื่อฟังก์ชันที่สองเรียกใช้ฟังก์ชันเพรดิเคต)
  • หลีกเลี่ยงการใช้การรวมตารางมากเกินไปในฟังก์ชันเพรดิเคตเพื่อเพิ่มประสิทธิภาพสูงสุด

ข้อจำกัดและข้อจำกัดใน RLS

ต่อไปนี้เป็นข้อจำกัดบางประการที่ใช้กับ RLS:

  • ต้องสร้างฟังก์ชันเพรดิเคตด้วย SCHEMABINDING . หากฟังก์ชันถูกสร้างขึ้นโดยไม่มี SCHEMABINDING และคุณพยายามผูกมัดกับนโยบายความปลอดภัย มันส่งข้อผิดพลาด
  • ไม่สามารถสร้างมุมมองที่จัดทำดัชนีในตารางที่ใช้ RLS ได้
  • ตารางในหน่วยความจำไม่ได้รับการสนับสนุนสำหรับ RLS
  • ไม่รองรับดัชนีข้อความแบบเต็ม

บทสรุป

ด้วยคุณลักษณะ RLS ใน SQL Server 2016 คุณสามารถรักษาความปลอดภัยให้กับระเบียนที่ระดับฐานข้อมูลโดยไม่ต้องทำการเปลี่ยนแปลงในระดับแอปพลิเคชัน คุณสามารถใช้ RLS ได้โดยใช้ฟังก์ชันเพรดิเคตและฟีเจอร์นโยบายความปลอดภัยใหม่ควบคู่ไปกับโค้ดที่มีอยู่ โดยไม่จำเป็นต้องเปลี่ยนโค้ด DataManipulation Language (DML) ในฐานข้อมูลของคุณ

ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม

เพิ่มประสิทธิภาพสภาพแวดล้อมของคุณด้วยการดูแลระบบ การจัดการ และการกำหนดค่าจากผู้เชี่ยวชาญ

บริการแอปพลิเคชันของ Rackspace(RAS) ผู้เชี่ยวชาญจะให้บริการแบบมืออาชีพและที่มีการจัดการในแอปพลิเคชันที่หลากหลาย:

  • แพลตฟอร์มอีคอมเมิร์ซและประสบการณ์ดิจิทัล
  • การวางแผนทรัพยากรองค์กร (ERP)
  • ระบบธุรกิจอัจฉริยะ
  • การจัดการลูกค้าสัมพันธ์ของ Salesforce (CRM)
  • ฐานข้อมูล
  • อีเมลโฮสติ้งและประสิทธิภาพการทำงาน

เราจัดส่ง:

  • ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
  • ประสบการณ์สุดคลั่ง ™:เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
  • ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
  • ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ

แชทเลยเพื่อเริ่มต้น