天天看点

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,如需转载请自行联系原作者