Làm cách nào để cấp tất cả các đặc quyền trên tất cả các bảng trong một lược đồ cho người dùng trong IBM DB2?


9

Ở nơi đầu tiên, tôi muốn xuất cơ sở dữ liệu từ IBM AIX AIX sang các cửa sổ IBM DB2. Thật không may, tôi không thể sử dụng lệnh BACKUP và RESTORE vì sự cố hệ điều hành khác nhau. Vì vậy, tôi phải dùng đến lệnh db2move .

Tôi đã xuất lược đồ myschema và tất cả các bảng từ cơ sở dữ liệu dbemp trong IBM AIX từ xa bằng cách sử dụng lệnh này:

db2move dbemp export -sn myschema

Khi tôi chạy lệnh đó, tôi đã đăng nhập với tên người dùng có tên là dbuser1 .

Nó tạo ra một loạt các tập tin trong thư mục hiện tại. Tôi lấy các tệp vào máy cục bộ (windows) đã cài đặt IBM DB2 LUW.

Bây giờ trong IBM DB2 của máy cục bộ của tôi, trước tiên tôi đã loại bỏ lược đồ myschema bằng cách sử dụng IBM Data Studio (tôi cũng có một cơ sở dữ liệu dbemp cục bộ ).

Sau đó, tôi đã nhập các tệp bằng lệnh này:

db2move dbemp import

Nó nhập thành công lược đồ và bảng vào cơ sở dữ liệu dbemp cục bộ .

Khi tôi thực hiện các hành động trên, tôi đã đăng nhập với tư cách là người dùng winuser1 .

Tôi cũng có một người dùng cục bộ có tên là dbuser1 trong máy cục bộ của mình (windows). Trong IBM Data Studio, tôi đã tạo một hồ sơ kết nối kết nối với dbemp cục bộ bằng cách sử dụng người dùng dbuser1 và tôi có thể duyệt lược đồ myschema và các bảng, nhưng tôi không thể duyệt dữ liệu của bảng (tôi gặp lỗi đặc quyền). Người dùng winuser1 có thể duyệt dữ liệu của bảng, nhưng với mục đích phát triển, tôi phải kết nối với cơ sở dữ liệu bằng cách sử dụng dbuser1 .

Vì vậy, tôi phát hiện ra rằng tôi có thể cấp đặc quyền cho người dùng trên bàn như thế này:

GRANT ALL ON myschema.table1 TO USER dbuser1

Vấn đề là tôi có 100 bảng, tôi không muốn gõ các dòng đó cho mỗi bảng. Và thật không may, không có giải pháp ký tự đại diện như thế này:

GRANT ALL ON myschema.* TO USER dbuser1 -- this doesn't work

Vì vậy, câu hỏi là làm thế nào để cấp tất cả các đặc quyền trên tất cả các bảng trong một lược đồ cho người dùng? Hoặc có giải pháp thay thế tốt hơn? có thể bằng cách sao chép tất cả các đặc quyền từ winuser1 sang dbuser1 ?

Câu trả lời:


8

Nếu bạn muốn truy cập vào tất cả dữ liệu (nghĩa là tất cả các bảng trong tất cả các lược đồ), bạn sẽ cần phải cấp dữ liệu.

db2 grant dataaccess on database to user winuser1

Nếu bạn chỉ muốn winuser1 chỉ truy cập vào 100 bảng trong lược đồ mà bạn đang đề cập, thì thật không may, không có cách nào dễ dàng, bạn sẽ cần phải cấp CHỌN trên mỗi bảng. Điều đó đang được nói, nó có thể được thực hiện thông qua kịch bản.

Bạn có thể làm như sau

db2 -tnx "select distinct 'GRANT ALL ON TABLE '||
    '\"'||rtrim(tabschema)||'\".\"'||rtrim(tabname)||'\" TO USER winuser1;'
    from syscat.tables
    where tabschema = 'myschema' "  >> grants.sql

db2 -tvf grants.sql

Điều này sử dụng truy vấn các danh mục hệ thống để tự động tạo một tập lệnh để cho phép mọi thứ. Đây là rất nhiều cách chúng tôi cấp phép cho người dùng mà chúng tôi không muốn cung cấp dữ liệu cho.

Đây là một trang tốt của các nhà chức trách cho DB2 .


cảm ơn, db2 grant dataaccesslàm việc Tôi không ngại cấp chúng cho tất cả các lược đồ khi tôi ở trong môi trường phát triển.
null

0

Nếu bạn đang sử dụng trình soạn thảo SQL như Toad, tập lệnh này cũng có thể hữu ích. Bạn có thể sao chép / dán kết quả vào một cửa sổ mới.

SELECT DISTINCT
      'GRANT Select ON TABLE '
   || rtrim (tabschema)
   || '.'
   || rtrim (tabname)
   || ' TO USER USERNAME;'
  FROM syscat.tables
 WHERE tabschema = 'Schema'
 UNION
 SELECT    'GRANT Select ON VIEW '
   || rtrim (VIEWSCHEMA)
   || '.'
   || rtrim (viewname)
   || ' TO USER USERNAME;'
 FROM SYSCAT.VIEWS
 WHERE VIEWSCHEMA = 'Schema';

0

Bạn cũng có thể thử (sử dụng trình soạn thảo SQL):

BEGIN
 FOR v AS cur CURSOR FOR 
    select 
        'GRANT SELECT, INSERT, UPDATE, DELETE ON ' || trim(tabschema) || '.' || trim(tabname) || ' TO YourUser' stmt 
    from 
        syscat.tables 
    where 
        tabschema = 'YourSchema' 
  DO 
    EXECUTE IMMEDIATE v.stmt;
  END FOR;
END
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.