Mongo สร้างผู้ใช้ในฐานะผู้ดูแลระบบสำหรับฐานข้อมูลใด ๆ ที่ทำให้เกิดข้อผิดพลาด


17

ฉันกำลังพยายามสร้างผู้ใช้แบบง่าย ๆ โดยได้รับอนุญาตให้เข้าถึงฐานข้อมูลและสามารถดำเนินการใด ๆ ได้ เมื่อฉันพยายามรันcreateUserคำสั่งฉันได้รับข้อผิดพลาดนี้:

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

ปัญหาข้างต้นเกิดขึ้นเฉพาะเมื่อฉันเปิดใช้งานการกำหนดค่ารับรองความถูกต้องและฉันต้องการมัน

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

กรุณาช่วยใด ๆ

ใช้Mongo เวอร์ชัน 3.0.5

บริการอยู่ในAmazon Linux AMI 2015.03 (HVM), SSD Volume Type - ami-1ecae776

คำตอบ:


22

ควรเพิ่มบทบาท '... AnyDatabase' ลงในฐานข้อมูลผู้ดูแลระบบสำหรับผู้ใช้:

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

ฐานข้อมูลใด ๆ :

  • บทบาทผู้ใช้ฐานข้อมูล
  • บทบาทการบริหารฐานข้อมูล

ฐานข้อมูลผู้ดูแลระบบ:

  • บทบาทการบริหารคลัสเตอร์
  • บทบาทการสำรองและกู้คืน
  • บทบาทฐานข้อมูลทั้งหมด

พิเศษ: เพื่อให้บทบาทที่แตกต่างในฐานข้อมูลและผู้ดูแลระบบที่แตกต่างกัน:

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

1
ฉันสร้างผู้ใช้ mongoadmin บนฐานข้อมูลผู้ดูแลระบบ แต่เมื่อฉันพยายามดำเนินการใด ๆ ในฐานข้อมูลอื่นฉันได้รับข้อผิดพลาดในการให้สิทธิ์
Robert

คุณลองทำอะไร ลองดูที่: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin

0

เป็นต่อMongoDB BOL การเปิดใช้งานการตรวจสอบสิทธิ์ด้วยการควบคุมการเข้าถึงที่เปิดใช้งานให้คุณมีผู้ใช้ที่มีuserAdminหรือuserAdminAnyDatabaseบทบาทในฐานข้อมูลผู้ดูแลระบบ ผู้ใช้นี้สามารถจัดการผู้ใช้และบทบาทเช่น: สร้างผู้ใช้มอบหรือยกเลิกบทบาทจากผู้ใช้และสร้างหรือปรับเปลี่ยนบทบาทศุลกากร

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

ขั้นตอน

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

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)

เชื่อมต่อกับอินสแตนซ์

ตัวอย่างเช่นเชื่อมต่อmongoเชลล์กับอินสแตนซ์

mongo --port 27017

ระบุตัวเลือกบรรทัดคำสั่งเพิ่มเติมตามความเหมาะสมในการเชื่อมต่อเปลือกที่จะใช้งานของคุณเช่นmongo--host

สร้างผู้ดูแลระบบผู้ใช้

ตัวอย่างเช่นที่นี่ในฐานข้อมูลผู้ดูแลระบบเพิ่มผู้ใช้ที่มีuserAdminAnyDatabaseบทบาท ตัวอย่างเช่นต่อไปนี้สร้างผู้ใช้myUserAdminในฐานข้อมูลผู้ดูแลระบบ :

> 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"
                }
        ]
}

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

ถอดmongoเปลือกออก

เริ่มต้นอินสแตนซ์ MongoDB อีกครั้งด้วยการควบคุมการเข้าถึง

เริ่มต้นmongodอินสแตนซ์ใหม่ด้วยตัวเลือก --auth บรรทัดคำสั่งหรือหากใช้ไฟล์กำหนดค่าการตั้งค่าความปลอดภัยการอนุญาต

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

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

เชื่อมต่อและรับรองความถูกต้องในฐานะผู้ดูแลระบบผู้ใช้

ใช้mongoเปลือกคุณสามารถ:

  • เชื่อมต่อกับการพิสูจน์ตัวตนโดยส่งผ่านข้อมูลรับรองผู้ใช้หรือ

  • เชื่อมต่อกับการพิสูจน์ตัวตนครั้งแรกก่อนแล้วจึงออกวิธี db.auth ()เพื่อตรวจสอบความถูกต้อง

ในการตรวจสอบสิทธิ์ระหว่างการเชื่อมต่อเริ่มต้นmongoเชลล์ด้วย-u <username>, -p <password>, and the --authenticationDatabase <database>ตัวเลือกบรรทัดคำสั่ง:

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.

เพื่อรับรองความถูกต้องหลังจากเชื่อมต่อ

เชื่อมต่อmongoเชลล์กับmongod:

mongo --port 27017

สลับไปยังฐานข้อมูลการพิสูจน์ตัวตน (ในกรณีนี้ผู้ดูแลระบบ) และใช้วิธี db.auth (,)เพื่อตรวจสอบสิทธิ์:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.