PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tích hợp PostgreSQL với hệ thống xác thực

PostgreSQL là một trong những cơ sở dữ liệu an toàn nhất trên thế giới. Bảo mật cơ sở dữ liệu đóng một vai trò cấp thiết trong các môi trường quan trọng của sứ mệnh thế giới thực. Điều quan trọng là đảm bảo cơ sở dữ liệu và dữ liệu luôn được bảo mật và không bị truy cập trái phép do đó ảnh hưởng đến bảo mật dữ liệu. Mặc dù PostgreSQL cung cấp nhiều cơ chế và phương pháp khác nhau để người dùng truy cập cơ sở dữ liệu một cách an toàn, nó cũng có thể được tích hợp với các hệ thống xác thực bên ngoài khác nhau để đảm bảo đáp ứng các yêu cầu bảo mật cơ sở dữ liệu tiêu chuẩn của doanh nghiệp.

Ngoài việc cung cấp các cơ chế xác thực bảo mật thông qua SSL, MD5, pgpass và pg_ident, v.v., PostgreSQL có thể được tích hợp với nhiều hệ thống xác thực bên ngoài cấp doanh nghiệp phổ biến khác. Trọng tâm của tôi trong blog này sẽ là LDAP, Kerberos và RADIUS với SSL và pg_ident.

LDAP

LDAP đề cập đến Giao thức truy cập thư mục nhẹ, là một hệ thống xác thực tập trung được sử dụng phổ biến. Nó là một kho dữ liệu lưu trữ thông tin đăng nhập của người dùng và nhiều thông tin chi tiết liên quan đến người dùng khác như Tên, Miền, Đơn vị kinh doanh, v.v. dưới dạng phân cấp trong một định dạng bảng. Người dùng cuối kết nối với hệ thống đích (ví dụ:cơ sở dữ liệu) trước tiên phải kết nối với máy chủ LDAP để có được xác thực thành công. LDAP là một trong những hệ thống xác thực phổ biến hiện được sử dụng trong các tổ chức yêu cầu tiêu chuẩn bảo mật cao.

LDAP + PostgreSQL

PostgreSQL có thể được tích hợp với LDAP. Theo kinh nghiệm tư vấn khách hàng của tôi, đây được coi là một trong những khả năng chính của PostgreSQL. Vì quá trình xác thực tên người dùng và mật khẩu diễn ra tại máy chủ LDAP, để đảm bảo người dùng có thể kết nối với cơ sở dữ liệu thông qua LDAP, tài khoản người dùng phải tồn tại trong cơ sở dữ liệu. Nói cách khác, điều này có nghĩa là người dùng khi cố gắng kết nối với PostgreSQL được chuyển đến máy chủ LDAP trước rồi đến cơ sở dữ liệu Postgres sau khi xác thực thành công. Cấu hình có thể được thực hiện trong tệp pg_hba.conf để đảm bảo các kết nối được định tuyến đến máy chủ LDAP. Dưới đây là mục nhập pg_hba.conf mẫu -

host    all    pguser   0.0.0.0/0    ldap ldapserver=ldapserver.example.com ldapprefix="cn=" ldapsuffix=", dc=example, dc=com"

Dưới đây là ví dụ về mục nhập LDAP trong pg_hba.conf:

host    all    pguser   0.0.0.0/0    ldap ldapserver=ldapserver.example.com ldapprefix="cn=" ldapsuffix=", ou=finance, dc=example, dc=com"

Khi sử dụng cổng ldap không mặc định và TLS:

ldap ldapserver=ldapserver.example.com ldaptls=1 ldapport=5128 ldapprefix="uid=" ldapsuffix=",ou=finance,dc=apix,dc=com"

Hiểu Mục nhập LDAP ở trên

  • LDAP sử dụng các thuộc tính và thuật ngữ khác nhau để lưu trữ / tìm kiếm mục nhập của người dùng trong kho dữ liệu của nó. Ngoài ra, như đã đề cập ở trên, các mục nhập của người dùng được lưu trữ trong hệ thống phân cấp.
  • Các mục nhập pg_hba.conf ldap ở trên bao gồm các thuộc tính được gọi là CN (Tên chung), OU (Đơn vị tổ chức) và DC (Thành phần miền), được gọi là Tên phân biệt tương đối (RDN), chuỗi RDN này cùng nhau trở thành một cái gì đó gọi là DN (Tên riêng). DN là đối tượng LDAP dựa vào đó, tìm kiếm được thực hiện trong kho dữ liệu LDAP.
  • Các giá trị thuộc tính LDAP như CN, DC, OU, v.v. được xác định trong Lớp đối tượng của LDAP. Các giá trị này có thể được cung cấp bởi các chuyên gia hệ thống đã xây dựng môi trường LDAP.

Điều đó có làm cho LDAP đủ an toàn không?

Có thể không. Mật khẩu được giao tiếp qua mạng trong môi trường LDAP không được mã hóa, điều này có thể là một rủi ro bảo mật vì mật khẩu được mã hóa có thể bị tấn công. Có các tùy chọn để làm cho giao tiếp thông tin xác thực an toàn hơn.

  1. Xem xét định cấu hình LDAP trên TLS (Bảo mật lớp truyền tải)
  2. LDAP có thể được định cấu hình bằng SSL, đây là một tùy chọn khác

Mẹo để đạt được tích hợp LDAP với PostgreSQL

(dành cho hệ thống dựa trên Linux)

  • Cài đặt các mô-đun openLDAP thích hợp dựa trên phiên bản hệ điều hành
  • Đảm bảo phần mềm PostgreSQL được cài đặt với các thư viện LDAP
  • Đảm bảo LDAP được tích hợp tốt với Active Directory
  • Làm quen với mọi BUG hiện có trong các mô-đunLDAP mở đang được sử dụng. Điều này có thể rất thảm khốc và có thể ảnh hưởng đến các tiêu chuẩn bảo mật.
  • Windows Active Directory cũng có thể được tích hợp với LDAP
  • Xem xét định cấu hình LDAP với SSL an toàn hơn. Cài đặt các mô-đun openSSL thích hợp và lưu ý các BUG giống như tràn máu có thể làm lộ thông tin đăng nhập được truyền qua mạng.

Kerberos

Kerberos là một hệ thống xác thực tập trung tiêu chuẩn công nghiệp được sử dụng phổ biến trong các tổ chức và cung cấp cơ chế xác thực dựa trên mã hóa. Mật khẩu được xác thực bởi máy chủ xác thực của bên thứ ba được gọi là KDC (Trung tâm phân phối khóa). Mật khẩu có thể được mã hóa dựa trên các thuật toán khác nhau và chỉ có thể được giải mã với sự trợ giúp của các khóa cá nhân được chia sẻ. Điều này cũng có nghĩa là mật khẩu được truyền qua mạng được mã hóa.

PostgreSQL + Kerberos

PostgreSQL hỗ trợ xác thực dựa trên GSSAPI với Kerberos. Người dùng cố gắng kết nối với cơ sở dữ liệu Postgres, sẽ được chuyển đến máy chủ KDC để xác thực. Việc xác thực này giữa các máy khách và cơ sở dữ liệu KDC được thực hiện dựa trên các khóa cá nhân được chia sẻ và sau khi xác thực thành công, các máy khách bây giờ sẽ nắm giữ thông tin xác thực dựa trên Kerberos. Các thông tin xác thực tương tự phải được xác thực giữa máy chủ Postgres và KDC. Quá trình này sẽ được thực hiện dựa trên tệp keytab do Kerberos tạo ra. Tệp keytab này phải tồn tại trên máy chủ cơ sở dữ liệu với các quyền thích hợp cho người dùng sở hữu quy trình Postgres.

Cấu hình Kerberos và quy trình kết nối -

  • Tài khoản người dùng dựa trên Kerberos phải tạo một vé (một yêu cầu kết nối) bằng lệnh “kinit”.

  • Tệp keytab phải được tạo bằng lệnh “kadmin” cho tài khoản người dùng dựa trên Kerberos đủ điều kiện (chính) và sau đó Postgres sẽ sử dụng cùng một tệp keytab để xác thực thông tin đăng nhập. Hiệu trưởng có thể được mã hóa và thêm vào tệp keytab hiện có bằng lệnh “ktadd”. Mã hóa Kerberos hỗ trợ các thuật toán mã hóa tiêu chuẩn ngành khác nhau.

    Tệp keytab đã tạo phải được sao chép sang máy chủ Postgres, nó phải có thể đọc được bằng quy trình Postgres. Tham số postgresql.conf dưới đây phải được định cấu hình:

    krb_server_keyfile = '/database/postgres/keytab.example.com'

    Nếu bạn đặc biệt về phân biệt chữ hoa chữ thường, thì hãy sử dụng tham số dưới đây

    krb_caseins_users which is by default “off”  (case sensitive)
  • Một mục nhập phải được thực hiện trong pg_hba.conf để đảm bảo các kết nối được định tuyến đến máy chủ KDC

    Ví dụ về mục pg_hba.conf

    # TYPE DATABASE       USER    CIDR-ADDRESS            METHOD
    host     all                     all         192.168.1.6/32            gss include_realm=1 krb_realm=EXAMPLE.COM

    Ví dụ mục nhập pg_hba.conf với mục nhập bản đồ

    # TYPE DATABASE       USER    CIDR-ADDRESS            METHOD
    host     all                     all         192.168.1.6/32            gss include_realm=1 krb_realm=EXAMPLE.COM map=krb
  • Tài khoản người dùng cố gắng kết nối phải được thêm vào cơ sở dữ liệu KDC được gọi là tài khoản chính và tài khoản người dùng tương tự hoặc tài khoản người dùng ánh xạ cũng phải tồn tại trong cơ sở dữ liệu

    Dưới đây là ví dụ về hiệu trưởng của Kerberos

    [email protected]

    pguser là tên người dùng và “example.com” là tên vùng được định cấu hình trong cấu hình Kerberos (/etc/krb5.conf) trong máy chủ KDC.

    Trong thế giới kerberos, các hiệu trưởng có định dạng như email ([email protected]) và người dùng cơ sở dữ liệu không thể được tạo ở định dạng tương tự. Điều này khiến các DBA nghĩ đến việc tạo ánh xạ tên người dùng cơ sở dữ liệu thay thế và đảm bảo các tên chính kết nối với các tên được ánh xạ bằng pg_ident.conf.

    Dưới đây là ví dụ về mục nhập tên bản đồ trong pg_ident.conf

    # MAPNAME           SYSTEM-USERNAME               GP-USERNAME
       mapuser               /^(.*)EXAMPLE\.DOMAIN$      admin

Điều đó có làm cho Kerberos được bảo mật đủ không?

Có thể không. Thông tin đăng nhập của người dùng được giao tiếp qua mạng có thể bị lộ, bị tấn công. Mặc dù Kerberos mã hóa các nguyên tắc nhưng chúng có thể bị đánh cắp, bị tấn công. Điều này dẫn đến nhu cầu thực hiện bảo mật lớp mạng. Có, SSL hoặc TLS là cách để đi. Hệ thống xác thực Kerberos có thể được tích hợp với SSL hoặc TLS. TLS là sự kế thừa của SSL. Bạn nên định cấu hình Kerberos bằng SSL hoặc TLS để giao tiếp qua mạng được bảo mật.

LỜI KHUYÊN

  • Đảm bảo các thư viện krb * được cài đặt
  • Thư viện OpenSSL phải được cài đặt để định cấu hình SSL
  • Đảm bảo Postgres được cài đặt với các tùy chọn sau
    ./configure --with-gssapi --with-krb-srvnam --with-openssl
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

RADIUS

RADIUS là một giao thức mạng dịch vụ xác thực từ xa cung cấp

tập trung

Xác thực, Ủy quyền và Kế toán (AAA). Các cặp tên người dùng / mật khẩu được xác thực tại máy chủ RADIUS. Cách xác thực tập trung này dễ hiểu và đơn giản hơn nhiều so với các hệ thống xác thực khác như LDAP và Kerberos, vốn có một chút phức tạp.

RADIUS + PostgreSQL

PostgreSQL có thể được tích hợp với cơ chế xác thực RADIUS. Kế toán chưa được hỗ trợ trong Postgres. Điều này yêu cầu tài khoản người dùng cơ sở dữ liệu phải tồn tại trong cơ sở dữ liệu. Các kết nối với cơ sở dữ liệu được ủy quyền dựa trên bí mật được chia sẻ được gọi là “radiussecret”.

Một mục nhập trong cấu hình pg_hba.conf là cần thiết để định tuyến các kết nối đến máy chủ bán kính để xác thực.

Ví dụ về mục pg_hba.conf

hostssl             all        all        0.0.0.0/0         radius  radiusserver=127.0.0.1 radiussecret=secretr radiusport=3128

Để hiểu mục trên -

“Radiusserver” là địa chỉ IP máy chủ của máy chủ RADIUS nơi người dùng được định tuyến để xác thực. Tham số này được định cấu hình trong /etc/radiusd.conf trong máy chủ RADIUS.

Giá trị "radiussecret" được trích xuất từ ​​client.conf. Đây là mã bí mật xác định duy nhất kết nối máy khách bán kính.

"Radiusport" có thể được tìm thấy trong tệp /etc/radiusd.conf. Đây là cổng mà các kết nối bán kính sẽ được lắng nghe.

Tầm quan trọng của SSL

SSL (Lớp cổng bảo mật) đóng một vai trò cấp thiết với các hệ thống xác thực bên ngoài tại chỗ. Chúng tôi khuyên bạn nên định cấu hình SSL với hệ thống xác thực bên ngoài vì sẽ có sự trao đổi thông tin nhạy cảm giữa máy khách và máy chủ qua mạng và SSL có thể thắt chặt bảo mật hơn nữa.

Tác động đến hiệu suất của việc sử dụng hệ thống xác thực bên ngoài

Một hệ thống an ninh hiệu quả và hiệu quả đi kèm với chi phí của hiệu suất. Khi khách hàng / người dùng cố gắng kết nối với cơ sở dữ liệu được chuyển đến hệ thống xác thực để thiết lập kết nối, có thể có sự suy giảm hiệu suất. Có nhiều cách để vượt qua các rào cản về hiệu suất.

  • Với cơ chế xác thực bên ngoài được cung cấp, có thể có độ trễ khi thiết lập kết nối với cơ sở dữ liệu. Đây có thể là một mối quan tâm thực sự khi có rất nhiều kết nối được thiết lập với cơ sở dữ liệu.
  • Các nhà phát triển cần đảm bảo rằng số lượng kết nối cao không cần thiết sẽ không được thực hiện với cơ sở dữ liệu. Nhiều yêu cầu ứng dụng được cung cấp thông qua một kết nối sẽ là một lợi thế.
  • Ngoài ra, thời gian của mỗi yêu cầu ở cuối cơ sở dữ liệu cũng đóng một vai trò quan trọng. Nếu yêu cầu mất nhiều thời gian hơn để hoàn thành, thì các yêu cầu tiếp theo sẽ xếp hàng. Điều chỉnh hiệu suất của các quy trình và cấu trúc cơ sở hạ tầng một cách tỉ mỉ sẽ là chìa khóa quan trọng!
  • Cơ sở dữ liệu và cơ sở hạ tầng phải được lưu trữ hiệu quả và có đủ năng lực để đảm bảo hoạt động tốt.
  • Khi thực hiện đo điểm chuẩn hiệu suất, hãy đảm bảo SSL được bật và thời gian thiết lập kết nối trung bình sau đó phải được đánh giá.

Tích hợp hệ thống xác thực bên ngoài với ClusterControl - PostgreSQL

Các phiên bản PostgreSQL có thể được xây dựng và cấu hình tự động thông qua ClusterControl GUI. Việc tích hợp hệ thống xác thực bên ngoài với các Phiên bản PostgreSQL được triển khai qua ClusterControl khá giống với việc tích hợp với các phiên bản PostgreSQL truyền thống và trên thực tế thì đơn giản hơn một chút. Dưới đây là tổng quan về cùng một -

  • ClusterControl cài đặt các thư viện PostgreSQL được kích hoạt với các khả năng LDAP, KRB, GSSAPI và OpenSSL
  • Việc tích hợp với hệ thống xác thực bên ngoài yêu cầu các thay đổi cấu hình tham số khác nhau trên máy chủ cơ sở dữ liệu postgresql có thể được thực hiện bằng ClusterControl GUI.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tóm lại, lập chỉ mục cơ sở dữ liệu với B + tree và Hash để so sánh

  2. Lỗi postgres khi chèn - LỖI:chuỗi byte không hợp lệ để mã hóa UTF8:0x00

  3. Tại sao tôi không thể sử dụng bí danh cột trong biểu thức SELECT tiếp theo?

  4. Trả về Loại bảng từ một hàm trong PostgreSQL

  5. Hàm xóa dấu trong postgreSQL