มีคนเสนอให้มอบการเข้าสู่ระบบ PostgreSQL แก่ลูกค้า เพื่อให้ใบเบิกค่าใช้จ่ายเดินทางแบบเข้ารหัสตั้งแต่ต้นจนจบ ผู้ดูแลฐานข้อมูลต้องการเซสชัน SQL จริง และอีกคนเสนอแบบฟอร์มเว็บแทน ทั้งสองข้อเสนอแก้ปัญหาผิด เพราะไม่มีข้อใดเริ่มจากปฏิบัติการที่ลูกค้าทำจริง พิจารณาสามการตัดสินใจตามลำดับ แล้วคำถามว่า TLS แทน VPN ได้หรือไม่จะตอบตัวเอง

เริ่มจากปฏิบัติการที่ลูกค้าต้องการ

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

จากนั้นเขียนว่าใครเป็นผู้ส่งคำขอ ลูกค้า เจ้าหน้าที่สนับสนุน และผู้ดูแลไม่สามารถแลกเปลี่ยนกันได้แม้จะแตะตารางเดียวกัน ความแตกต่างนี้กำหนดว่าลูกค้าควรเห็นภาษาเรียกค้นมากเพียงใด

คำตอบทั้งสองกำหนดอินเทอร์เฟซ ทุกอย่างหลังจากนั้นคือการนำไปใช้ และการถกเถียงเรื่องการเข้ารหัสส่วนใหญ่เป็นการถกเถียงว่าเลือกอินเทอร์เฟซใด

สามการควบคุม สามการตัดสินใจ

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

ไม่มีข้อใดในสามข้อแทนที่กันและกัน ซึ่งตารางแสดงให้เห็นชัดเจน

ControlWhat it decidesWhat it leaves open
Authenticated TLSConnection protection and which TLS identities are acceptedWhich tables a database user may touch
Restricted network entryWhich sources reach the listenerWhether an authenticated user should run a given statement
Database authorizationWhich objects and actions a role may useWhether the connection arrived by an approved path

อ่านแถวที่คุณพึ่งพาก่อนจะลบแถวอื่น การออกแบบเหล่านี้ส่วนใหญ่ล้มเหลวเพราะควบคุมถูกสันนิษฐานแทนที่จะกำหนดค่า

SQL โดยตรงทำให้ นโยบายของฐานข้อมูลยังคงรับผิดชอบ

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

ความแตกต่างนี้ควรตรวจสอบในการกำหนดค่าที่ทำงานอยู่ ไม่ใช่ในแม่แบบ เซิร์ฟเวอร์ที่ให้ TLS และยอมรับข้อความธรรมดาไม่ใช่การออกแบบที่คนส่วนใหญ่คิดว่าตนติดตั้งไว้ อ่านกฎการเข้าถึงและดูว่ารายการใดกำหนดสิ่งนี้จริง การตรวจครั้งเดียวนั้นแยกเซิร์ฟเวอร์ที่สามารถเข้ารหัสออกจากเซิร์ฟเวอร์ที่เข้ารหัสเท่านั้น

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

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

ใบรับรองไคลเอนต์เป็นข้อมูลรับรอง ไม่ใช่ ACL

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

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

ใบรับรองที่แข็งแรงซึ่งผูกกับบทบาทที่มีสิทธิ์มากเกินไปให้ผู้ดูแลที่ผ่านการพิสูจน์ตัวตนอย่างดี ตรวจบทบาทก่อนฉลองใบรับรอง

เลือกอินเทอร์เฟซที่แคบกว่าเมื่อเหมาะสม

สำหรับใบเบิกค่าใช้จ่าย ปลายทางของแอปพลิเคชันที่รับใบเบิก บังคับใช้กฎทางธุรกิจ และคืนผลลัพธ์ที่อนุญาตของผู้ใช้รายนั้นเป็นตัวแทนของปฏิบัติการได้ดีกว่าบัญชี SQL ทั่วไป

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

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

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

บทความที่เกี่ยวข้อง