天天看點

mongodb的使用者管理

簡介:由于mongodb資料的使用者管理是基于單個庫的管理,他的管理政策大概如下

    如果驗證了admin庫的賬戶,那麼所有的庫都可以通路

    如果驗證了非admin庫的賬戶,那麼此權限隻能通路目前庫下的資料

步驟建議:

    如果要對資料庫進行賬戶設定,最好我們首先不要開啟資料庫驗證,然後進入admin庫,建立密碼

退出添加 -auth  驗證重新開機mongodb然後使用admin庫的賬戶進行驗證,如果通過那麼進入其它庫進行賬戶建立,完成後重新登入進行驗證

驗證如下:

    啟動mongod

        mongod.exe --dbpath=E:\mongodb\db -auth  -auth  開啟使用者驗證,如果啟動沒有添加此參數那麼使用者驗證将失敗

    首先進入admin庫

        use admin

    檢視目前資料的使用者

        show collections 能傳回兩個表

    添加admin庫的sa賬戶密碼為sa

        db.addUser('sa','sa')

    ctrl+c 退出目前登入

    重新登入并進入admin庫和test庫檢查是否能夠查詢目前表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<code>&gt; use admin</code>

<code>switched </code><code>to</code> <code>db admin</code>

<code>&gt; show collections</code>

<code>Mon Oct 13 17:11:01 uncaught exception: error: {</code>

<code>        </code><code>"$err"</code> <code>: </code><code>"unauthorized db:admin lock type:-1 client:127.0.0.1"</code><code>,</code>

<code>        </code><code>"code"</code> <code>: 10057</code>

<code>}</code>

<code>&gt; use test</code>

<code>Mon Oct 13 17:13:51 uncaught exception: error: {</code>

<code>        </code><code>"$err"</code> <code>: </code><code>"unauthorized db:test lock type:-1 client:127.0.0.1"</code><code>,</code>

    驗證admin庫裡面的sa賬戶是否能夠檢視admin庫和test庫的資訊

<code>&gt; db.auth(</code><code>'sa'</code><code>,</code><code>'sa'</code><code>)</code>

<code>1</code>

<code>system.indexes</code>

<code>system.users</code>

<code>switched </code><code>to</code> <code>db test</code>

<code>&gt;</code>

    進入test庫并建立使用者test密碼test

15

16

17

<code>&gt; db.addUser(</code><code>'test'</code><code>,</code><code>'test'</code><code>)</code>

<code>{</code>

<code>        </code><code>"updatedExisting"</code> <code>: </code><code>true</code><code>,</code>

<code>        </code><code>"n"</code> <code>: 1,</code>

<code>        </code><code>"connectionId"</code> <code>: 10,</code>

<code>        </code><code>"err"</code> <code>: </code><code>null</code><code>,</code>

<code>        </code><code>"ok"</code> <code>: 1</code>

<code>        </code><code>"_id"</code> <code>: ObjectId(</code><code>"543b80be1d60b11044c2fc59"</code><code>),</code>

<code>        </code><code>"user"</code> <code>: </code><code>"test"</code><code>,</code>

<code>        </code><code>"readOnly"</code> <code>: </code><code>false</code><code>,</code>

<code>        </code><code>"pwd"</code> <code>: </code><code>"a6de521abefc2fed4f5876855a3484f5"</code>

    ctrl+c退出重新登入,驗證test賬戶能夠通路test庫和admin庫

<code>&gt; db.auth(</code><code>'test'</code><code>,</code><code>'test'</code><code>)</code>

<code>Mon Oct 13 17:21:06 uncaught exception: error: {</code>

    驗證admin庫的admin帳号,看是否能檢視admin庫的資訊

PS:當驗證使用者的時候,如果傳回1證明有此使用者,如果傳回0證明沒有此使用者 如:

當主從也是用使用者驗證來同步的情況下,要在master和slave上設定同一使用者同一密碼:

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

<code>D:\mongodb\bin&gt;mongo.exe  127.0.0.1:27018</code>

<code>MongoDB shell version: 2.0.9</code>

<code>connecting </code><code>to</code><code>: 127.0.0.1:27018/test</code>

<code>&gt; db.addUser(</code><code>'root'</code><code>,</code><code>'123'</code><code>)</code>

<code>{ </code><code>"n"</code> <code>: 0, </code><code>"connectionId"</code> <code>: 1, </code><code>"err"</code> <code>: </code><code>null</code><code>, </code><code>"ok"</code> <code>: 1 }</code>

<code>        </code><code>"user"</code> <code>: </code><code>"root"</code><code>,</code>

<code>        </code><code>"pwd"</code> <code>: </code><code>"c2eb464922307de3bc3aaf9593f1d49b"</code><code>,</code>

<code>        </code><code>"_id"</code> <code>: ObjectId(</code><code>"543cca62a23db6161efcdf78"</code><code>)</code>

<code>&gt; use </code><code>local</code>

<code>switched </code><code>to</code> <code>db </code><code>local</code>

<code>&gt; db.addUser(</code><code>'repl'</code><code>,</code><code>'123'</code><code>)</code>

<code>        </code><code>"user"</code> <code>: </code><code>"repl"</code><code>,</code>

<code>        </code><code>"pwd"</code> <code>: </code><code>"f544158855b8fbf525ce926d8605a348"</code><code>,</code>

<code>        </code><code>"_id"</code> <code>: ObjectId(</code><code>"543cca6aa23db6161efcdf79"</code><code>)</code>

<code>&gt; show dbs;</code>

<code>admin   0.078125GB</code>

<code>local</code>   <code>0.078125GB</code>

<code>&gt; bye</code>

<code>D:\mongodb\bin&gt;mongo.exe  127.0.0.1:27017</code>

<code>connecting </code><code>to</code><code>: 127.0.0.1:27017/test</code>

<code>&gt; show dbs</code>

<code>Tue Oct 14 15:04:16 uncaught exception: listDatabases failed:{ </code><code>"errmsg"</code> <code>: </code><code>"need to login"</code><code>, </code><code>"ok"</code> <code>: 0 }</code>

<code>&gt; db.auth(</code><code>'root'</code><code>,</code><code>'123'</code><code>)</code>

<code>0</code>

<code>local</code>   <code>12.072265625GB</code>

<code>test    (empty)</code>

<code>Tue Oct 14 15:04:59 uncaught exception: listDatabases failed:{ </code><code>"errmsg"</code> <code>: </code><code>"need to login"</code><code>, </code><code>"ok"</code> <code>: 0 }</code>

<code>&gt; use sean</code>

<code>switched </code><code>to</code> <code>db sean</code>

<code>&gt; db.addUser(</code><code>'sean'</code><code>,</code><code>'123'</code><code>)</code>

<code>Tue Oct 14 15:05:44 uncaught exception: error {</code>

<code>        </code><code>"$err"</code> <code>: </code><code>"unauthorized db:sean lock type:-1 client:127.0.0.1"</code><code>,</code>

<code>Tue Oct 14 15:06:26 uncaught exception: listDatabases failed:{ </code><code>"errmsg"</code> <code>: </code><code>"need to login"</code><code>, </code><code>"ok"</code> <code>: 0 }</code>

<code>Tue Oct 14 15:06:30 uncaught exception: listDatabases failed:{ </code><code>"errmsg"</code> <code>: </code><code>"need to login"</code><code>, </code><code>"ok"</code> <code>: 0 }</code>

<code>sean    0.078125GB</code>

<code>&gt; show dbsbye</code>

<code>&gt; db.auth(</code><code>'sean'</code><code>,</code><code>'123'</code><code>)</code>

本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/1563383,如需轉載請自行聯系原作者