Mongo Tạo người dùng làm quản trị viên cho bất kỳ cơ sở dữ liệu nào phát sinh lỗi


17

Tôi đang cố gắng tạo một người dùng đơn giản với quyền truy cập vào bất kỳ cơ sở dữ liệu nào và có thể thực hiện bất kỳ hành động nào. Khi tôi cố thực thi createUserlệnh tôi đã gặp lỗi này:

db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})
2015-08-20T17:09:42.300+0000 E QUERY    Error: couldn't add user: No role named userAdminAnyDatabase@new_vehicles_catalog

Vấn đề ở trên chỉ xảy ra khi tôi kích hoạt cấu hình auth và tôi cần nó.

Vì vậy, làm cách nào để tạo người dùng có quyền quản trị cho bất kỳ cơ sở dữ liệu nào. Tôi muốn nó bởi vì tôi đã cấu hình các dịch vụ mongo của mình để sử dụng kết nối xác thực. Nếu tôi muốn thực hiện kết xuất dữ liệu của mình, tôi phải sử dụng tham số xác thực này.

Xin mọi người giúp đỡ?

Sử dụng mongo phiên bản 3.0.5 .

dịch vụ này có trên Amazon Linux AMI 2015.03 (HVM), Loại âm lượng SSD - ami-1ecae776

Câu trả lời:


22

Vai trò '... AnyDatabase' nên được thêm vào cơ sở dữ liệu quản trị viên cho người dùng:

use admin
db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})

Bất kỳ cơ sở dữ liệu:

  • Vai trò người dùng cơ sở dữ liệu
  • Vai trò quản trị cơ sở dữ liệu

Cơ sở dữ liệu quản trị viên:

  • Vai trò quản trị cụm
  • Vai trò sao lưu và phục hồi
  • Vai trò tất cả cơ sở dữ liệu

Thêm: Để cung cấp các vai trò khác nhau trên cơ sở dữ liệu và quản trị viên khác nhau:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})

1
Tôi tạo người dùng mongoadmin trên cơ sở dữ liệu quản trị viên, nhưng khi tôi cố gắng thực hiện bất kỳ hành động nào trong cơ sở dữ liệu khác, tôi gặp lỗi về ủy quyền.
Robert

Những hành động bạn đã cố gắng? Hãy xem: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin

0

Theo MongoDB BOL Enable Auth Với điều khiển truy cập được kích hoạt, đảm bảo bạn có một người dùng với userAdmin hoặc userAdminAnyDatabase vai trò trong cơ sở dữ liệu quản trị. Người dùng này có thể quản trị người dùng và các vai trò như: tạo người dùng, cấp hoặc thu hồi vai trò từ người dùng và tạo hoặc sửa đổi vai trò hải quan.

Bạn có thể tạo người dùng trước hoặc sau khi bật kiểm soát truy cập. Nếu bạn bật kiểm soát truy cập trước khi tạo bất kỳ người dùng nào, MongoDB cung cấp ngoại lệ localhost cho phép bạn tạo quản trị viên người dùng trong cơ sở dữ liệu quản trị viên. Sau khi tạo, bạn phải xác thực là quản trị viên người dùng để tạo thêm người dùng khi cần.

Thủ tục

Đây là thủ tục sau đây thông qua đó bạn có thể Enable Auth. Trước tiên, thêm quản trị viên người dùng vào một phiên bản MongoDB đang chạy mà không có kiểm soát truy cập và sau đó cho phép kiểm soát truy cập.

mongod --port 27017 --dbpath /data/db1

C:\Program Files\MongoDB\Server\3.6\bin>mongod --auth --port 27017 --dbpath /data/db1
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] MongoDB starting : pid=8048 port=27017 dbpath=/data/db1 64-bit host=ACSD140013
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] db version v3.6.0
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1u-fips  22 Sep 2016
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] allocator: tcmalloc
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] modules: none
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] build environment:
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten]     distmod: 2008plus-ssl
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     distarch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     target_arch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten] options: { net: { port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/data/db1" } }
2018-01-02T00:04:21.044-0700 I -        [initandlisten] Detected data files in /data/db1 created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-01-02T00:04:21.044-0700 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1508M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-01-02T00:04:21.557-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:556397][8048:140720576475904], txn-recover: Main recovery loop: starting at 1/35584
2018-01-02T00:04:21.677-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:676479][8048:140720576475904], txn-recover: Recovering log 1 through 2
2018-01-02T00:04:21.792-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:792524][8048:140720576475904], txn-recover: Recovering log 2 through 2
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2018-01-02T00:04:23.009-0700 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] ** WARNING: The file system cache of this machine is configured to be greater than 40% of the total memory. This can lead to increased memory pressure and poor performance.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] See http://dochub.mongodb.org/core/wt-windows-system-file-cache
2018-01-02T00:04:23.012-0700 I CONTROL  [initandlisten]
2018-01-02T10:04:23.320+0300 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db1/diagnostic.data'
2018-01-02T10:04:23.322+0300 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-01-02T10:05:09.214+0300 I NETWORK  [listener] connection accepted from 127.0.0.1:64482 #1 (1 connection now open)

Kết nối với ví dụ

Ví dụ, kết nối một mongoshell với thể hiện.

mongo --port 27017

Chỉ định các tùy chọn dòng lệnh bổ sung nếu thích hợp để kết nối mongoshell với triển khai của bạn, chẳng hạn như --host.

Tạo quản trị viên

Ví dụ ở đây trong cơ sở dữ liệu quản trị, thêm người dùng với userAdminAnyDatabasevai trò. Ví dụ: phần sau đây tạo người dùng myUserAdmintrong cơ sở dữ liệu quản trị viên :

> use admin
switched to db admin
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "mongoadmin",
...     pwd: "mongoadmin",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
        "user" : "mongoadmin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

LƯU Ý: Cơ sở dữ liệu nơi bạn tạo người dùng (trong ví dụ này là quản trị viên) là cơ sở dữ liệu xác thực của người dùng. Mặc dù người dùng sẽ xác thực cơ sở dữ liệu này, người dùng có thể có vai trò trong các cơ sở dữ liệu khác; tức là cơ sở dữ liệu xác thực của người dùng không giới hạn các đặc quyền của người dùng.

Ngắt kết nối mongovỏ.

Khởi động lại phiên bản MongoDB với kiểm soát truy cập

Khởi động lại mongodphiên bản với tùy chọn dòng lệnh --auth hoặc, nếu sử dụng tệp cấu hình, cài đặt security . Authorization .

mongod --auth --port 27017 --dbpath /data/db1

Các khách hàng kết nối với trường hợp này bây giờ phải xác thực chính họ là MongoDBngười dùng. Khách hàng chỉ có thể thực hiện các hành động được xác định bởi vai trò được chỉ định của họ.

Kết nối và xác thực là quản trị viên người dùng

Sử dụng mongoshell, bạn có thể:

  • Kết nối với xác thực bằng cách chuyển thông tin đăng nhập của người dùng hoặc

  • Trước tiên, kết nối với xác thực bằng, rồi đưa ra phương thức db.auth () để xác thực.

Để xác thực trong khi kết nối Bắt đầu một trình mongobao với các -u <username>, -p <password>, and the --authenticationDatabase <database>tùy chọn dòng lệnh:

C:\Program Files\MongoDB\Server\3.6\bin>mongo --port 27017 -u "mongoadmin" -p "mongoadmin" --authenticationDatabase "admin"
MongoDB shell version v3.6.0
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.0
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
2018-01-02T10:05:09.248+0300 I STORAGE  [main] In File::open(), CreateFileW for 'H:\\.mongorc.js' failed with Access is denied.

Để xác thực sau khi kết nối

Kết nối mongovỏ với mongod:

mongo --port 27017

Chuyển sang cơ sở dữ liệu xác thực (trong trường hợp này là quản trị viên) và sử dụng phương thức db.auth (,) để xác thực:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
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.