×

权限表 mongodb

如何用mongodb设计用户权限表?如何设计用户、角色、权限表

admin admin 发表于2023-01-17 16:52:39 浏览58 评论0

抢沙发发表评论

本文目录

如何用mongodb设计用户权限表

例如:mysql安装配置好后,有一个自带的mysql数据库,里面有一张user表,用来存放用户,以及用户权限,而mongodb这个最像关系型的数据库,有没有这样的表呢。
一,掌握权限,理解下面4条基本上就差不多
1,mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
2,切换到admin数据库,添加的账号才是管理员账号。
3,用户只能在用户所在数据库登录,包括管理员账号。
4,管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪
二,添加管理员账号
# mongo
MongoDB shell version: 2.4.6
connecting to: tank
》 use admin //切换到admin数据库
switched to db admin
》 show collections;
system.indexes
system.users //用户表
》 db.system.users.find(); //用户表没有数据
》 db.addUser(’tank’,’test’); //添加一个管理员账号
{
“user“ : “tank“,
“readOnly“ : false,
“pwd“ : “988432606980d0695e4f668f6bbc643a“,
“_id“ : ObjectId(“529e5d543b6a4608ac833429“)
}
三,开启动用户权限认证
# vim /etc/mongodb.conf //将auth=true前面的注释拿掉
# /etc/init.d/mongod restart //重启生效
四,用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库

# mongo
MongoDB shell version: 2.4.6
connecting to: tank
》 show dbs; //显示所有数据库失败,因为还没有认证
Wed Dec 4 06:39:50.925 listDatabases failed:{ “ok“ : 0, “errmsg“ : “unauthorized“ } at src/mongo/shell/mongo.js:46
》 db.auth(’tank’,’test’); //认证失败,因为这个用户不属于tank这个数据库
Error: 18 { code: 18, ok: 0.0, errmsg: “auth fails“ }
0
》 use admin //切换到admin数据库
switched to db admin
》 db.auth(’tank’,’test’); //在admin数据库认证成功
》 use tank; //切换到tank数据库
switched to db tank
》 show collections; //不会在提示没有权限了
contact
system.indexes
users
五,添加普通用启
》 use tank;
switched to db tank
》 db.addUser(’tank1’,’test’); //为tank数据库添加了一个可读写用户tank1
{
“_id“ : ObjectId(“529e5f8474b4c660718a70f3“),
“user“ : “tank1“,
“readOnly“ : false,
“pwd“ : “35dd47abff098f5b4f0b567db8edeac5“
}
》 db.addUser(’tank2’,’test’,true); //为tank数据库添加了一个只读用户tank2
{
“user“ : “tank2“,
“readOnly“ : true,
“pwd“ : “1792916c544d247538ded52e6df7b887“,
“_id“ : ObjectId(“529e67553992b24438d5e315“)
}
》 exit //退出
bye
# mongo
MongoDB shell version: 2.4.6
connecting to: tank
》 db.auth(’tank1’,’test’); //刚添加的用户可以登录。
六,php客户端连接
1, 推荐方法一
$mongo = new Mongo();

$db = $mongo-》selectDB(’tank’); //切换到tank数据库

$db-》authenticate(“tank3“, “test“); //认证

$users= $db-》selectCollection(“users“); //选取users表

$cursor = $users-》find(); //读取数据

foreach ($cursor as $id =》 $value) {
echo “$id: “; print_r($value); echo “《br》“;
}
这种方式比较好理解,根命令行下的操作过程差不多。
2,推荐方法二
$mongo = new Mongo(“mongodb://tank3:test@127.0.0.1:27017/tank“); //认证用户,这里的数据库,只启认证作用

$db = $mongo-》selectDB(’tank’); //选取数据库

$users= $db-》selectCollection(“users“);

$cursor = $users-》find();

foreach ($cursor as $id =》 $value) {
echo “$id: “; print_r($value); echo “《br》“;
}
上面二种方法的不同在于,一个先选数据库在认证,一个先认证在选数据库。

如何设计用户、角色、权限表

用户
:ID
UserName
角色与用户关系表:ID
userID
RoleID
角色:ID
RoleName
角色与权限项关系表:ID
权限项表ID
RoleID,Effectiveness
--显示这权限是否有效
权限项表
ID
Name
----------------
同1楼一致,只是多了Effectiveness
--显示这权限是否有效

数据库中权限表应该怎么设计

可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。
权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。

什么是DRM权限列表,怎么使用

DRM(digital right management)。DRM 可以翻译为:内容数字版权加密保护技术 他存储一些手机本身自带的东西,比如,词典,短信,彩信,童话记录,电话本,本机预置的铃声图片还有游戏等等,基本上是只读的不可删改,所以打开后显示“空白”。 他于数字化信息的特点决定了必须有另一种独特的技术,来加强保护这些数字化的音视频节目内容的版权,该技术就是数字权限管理技术---DRM(digital right management)。个权限表相当于注册个证书并在程序菜单里留个名.比较类似于版本保护内容和程序注册表. 这个DRM消耗本来无需10-20K,由于注册时把JAVA图标信息也注册了(I909之前的联想手机是不注册图标的),所以消耗多了点. 另外:某个JAVA程序的存档文件也会注册在该DRM权限表中,所以运行过带存档的JAVA后,也会消耗少量空间. 如果JAVA程序的内部信息中不含有某网站的版权信息,I909会拒绝安装,要想安装就得在电脑上下JAVA内部MF文件的信息,手动加个版权所有人,当然所有的JAVA一般都有此信息,没有此信息的JAVA都是被无良人士动过手脚的... 如果歌曲或视频自带版权证书,运行时也会消耗DRM权限表. 还好,歌曲或视频一般只有WMA和WMV才带证书...而I909又不支持. I909新机的DRM已经被消耗了1M这么多,应该不止是自带的JAVA程序消耗的,推测可能预装的各种工具箱里的软件等等都在此DRM中注册过. 不过不用担心,每个JAVA程序至多会占用30K, 用户可支配的约1700K可以让大家装约50-70个JAVA程序. 仍然期待有更大的DRM空间以安装更多JAVA.我的5300出手时,上面有150个以上的JAVA. 没有DRM权限表的害处:比如诺基亚S40V3,JAVA是免安装,直接运行的. 看似十分方便,但由于图标/名称/作者等信息的预览必须即时提取,所以导致打开存有多个JAVA程序的文件夹时,会卡很多秒.如果一个文件夹里有80个JAVA,那么打开此文件夹需要卡20秒时间... 而有了DRM注册后,进入JAVA程序的菜单界面,显示的是已经提取至手机内部高速闪存的信息,所以几乎没有延迟. 实际上,所有JAVA需要安装的手机都有DRM,只是大部分手机不显示这个空间罢了.

什么是权限表权限表有什么功能

在职位说明书JD中,通常都会包含某个职位的工作内容、职责、任职基本条件、上下级、评级等基本信息,并且,在职位说明书当中也通常都会对一些事项的处置权利进行基本的明确,但是,在绝大多数职位说明书中的权限描述都比较笼统,以至于身处该职位的人往往都需要在发生之时需要向同事或领导问询应该如何“介入”,或者就按照个人的理解来操作,结果导致了很多意想不到的麻烦,这就是权限不清晰惹的祸;更严重的是,如果企业没有对复杂的业务活动/任务进行权力的分配和界定,不仅容易导致效率低下,还会造成风险失控,给企业带来不必要的损失。
也许有人会想到,其实可以通过细化职位说明书、将权限在职位说明书中明确来解决权限不清晰,这是一个办法。但是,如果用这种方式操作的话,职位说明书会变得非常“厚”,尤其是对于一些中高层管理职位,这样就容易使得职位说明书的承载的信息量过大,不利于阅读和记忆。所以,更好的方法是专门用一张表,罗列和明确出某项事项所经由的相关职位,以及相关职位在这些特定事项上的介入程度,也就是“权限”。
权限表最大的作用在于明确了某些复杂的、需要经由多个部门或职位共同配合开展的工作事项里各个职位的介入程度,能够提高企业的风险控制能力,减少推诿扯皮、效率低下的情况。权限表可以单独使用,也可以结合流程图在一起使用。
众合众行通常将权限划分成九个等级:提出、组织、计划、执行、协助/配合、审核、审批、监督、分析/改进。为避免引起误读,还会附有名词解释,对不同的权限进行标准化、通俗化的解释;此外,无论是在撰写职位说明书还是权限表的时候,都应该尽量避免使用“负责”、“管理”这类过于笼统的词汇。

mysql有关权限的表都有哪几个

一.权限表
mysql数据库中的3个权限表:user 、db、 host
权限表的存取过程是:
1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;
2)通过权限验证,进行权限分配时,按照useràdbàtables_privàcolumns_priv的顺序进行分配。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
二.MySQL各种权限(共27个)
(以下操作都是以root身份登陆进行grant授权,以p1@localhost身份登陆执行各种命令。)
1. usage
连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。
mysql》 grant usage on *.* to ‘p1′@’localhost’ identified by ‘123′;
该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。
2. select
必须有select的权限,才可以使用select table
mysql》 grant select on pyt.* to ‘p1′@’localhost’;
mysql》 select * from shop;
3. create
必须有create的权限,才可以使用create table
mysql》 grant create on pyt.* to ‘p1′@’localhost’;
4. create routine
必须具有create routine的权限,才可以使用{create |alter|drop} {procedure|function}
mysql》 grant create routine on pyt.* to ‘p1′@’localhost’;
当授予create routine时,自动授予EXECUTE, ALTER ROUTINE权限给它的创建者:
mysql》 show grants for ‘p1′@’localhost’;
+—————————————————————————+
Grants for p1@localhost
+————————————————————————–+
| GRANT USAGE ON *.* TO ‘p1′@’localhost’ IDENTIFIED BY PASSWORD ‘*23AE809DDACAF96AF0FD78ED04B6A265E05AA257′ |
| GRANT SELECT, CREATE, CREATE ROUTINE ON `pyt`.* TO ‘p1′@’localhost’|
| GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `pyt`.`pro_shop1` TO ‘p1′@’localhost’ |
+————————————————————————————-+
5. create temporary tables(注意这里是tables,不是table)
必须有create temporary tables的权限,才可以使用create temporary tables.
mysql》 grant create temporary tables on pyt.* to ‘p1′@’localhost’;
$ mysql -h localhost -u p1 -p pyt
mysql》 create temporary table tt1(id int);
6. create view
必须有create view的权限,才可以使用create view
mysql》 grant create view on pyt.* to ‘p1′@’localhost’;
mysql》 create view v_shop as select price from shop;
7. create user
要使用CREATE USER,必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
mysql》 grant create user on *.* to ‘p1′@’localhost’;
或:mysql》 grant insert on *.* to p1@localhost;
8. insert
必须有insert的权限,才可以使用insert into ….. values….
9. alter
必须有alter的权限,才可以使用alter table
alter table shop modify dealer char(15);
10. alter routine
必须具有alter routine的权限,才可以使用{alter |drop} {procedure|function}
mysql》grant alter routine on pyt.* to ‘p1′@’ localhost ‘;
mysql》 drop procedure pro_shop;
Query OK, 0 rows affected (0.00 sec)
mysql》 revoke alter routine on pyt.* from ‘p1′@’localhost’;
$ mysql -h localhost -u p1 -p pyt
mysql》 drop procedure pro_shop;
ERROR 1370 (42000): alter routine command denied to user ‘p1′@’localhost’ for routine ‘pyt.pro_shop’
11. update
必须有update的权限,才可以使用update table
mysql》 update shop set price=3.5 where article=0001 and dealer=’A’;
12. delete
必须有delete的权限,才可以使用delete from ….where….(删除表中的记录)
13. drop
必须有drop的权限,才可以使用drop database db_name; drop table tab_name;
drop view vi_name; drop index in_name;
14. show database
通过show database只能看到你拥有的某些权限的数据库,除非你拥有全局SHOW DATABASES权限。
对于p1@localhost用户来说,没有对mysql数据库的权限,所以以此身份登陆查询时,无法看到mysql数据库:
mysql》 show databases;
+——————–+
| Database |
+——————–+
| information_schema|
| pyt |
| test |
+——————–+
15. show view
必须拥有show view权限,才能执行show create view。
mysql》 grant show view on pyt.* to p1@localhost;
mysql》 show create view v_shop;
16. index
必须拥有index权限,才能执行 index
mysql》 grant index on pyt.* to p1@localhost;
mysql》 create index ix_shop on shop(article);
mysql》 drop index ix_shop on shop;
17. excute
执行存在的Functions,Procedures
mysql》 call pro_shop1(0001,@a);
+———+
| article |
+———+
| 0001 |
| 0001 |
+———+
mysql》 select @a;
+——+
| @a |
+——+
| 2 |
+——+
18. lock tables
必须拥有lock tables权限,才可以使用lock tables
mysql》 grant lock tables on pyt.* to p1@localhost;
mysql》 lock tables a1 read;
mysql》 unlock tables;
19. references
有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。
20. reload
必须拥有reload权限,才可以执行flush
mysql》 grant reload on pyt.* to p1@localhost;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql》 grant reload on *.* to ‘p1′@’localhost’;
Query OK, 0 rows affected (0.00 sec)
mysql》 flush tables;
21. replication client
拥有此权限可以查询master server、slave server状态。
mysql》 show master status;
ERROR 1227 (42000): Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation
mysql》 grant Replication client on *.* to p1@localhost;
或:mysql》 grant super on *.* to p1@localhost;
mysql》 show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000006 | 2111 | | |
+——————+———-+————–+——————+
mysql》 show slave status;
22. replication slave
拥有此权限可以查看从服务器,从主服务器读取二进制日志。
mysql》 show slave hosts;
ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation
mysql》 show binlog events;
ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation
mysql》 grant replication slave on *.* to p1@localhost;
mysql》 show slave hosts;
Empty set (0.00 sec)
mysql》show binlog events;
+—————+——-+—————-+———–+————-+————–+
| Log_name | Pos | Event_type | Server_id| End_log_pos|Info | +—————+——-+————–+———–+————-+—————+
| mysql-bin.000005 | 4 | Format_desc | 1 | 98 | Server ver: 5.0.77-log, Binlog ver: 4 | |mysql-bin.000005|98|Query|1|197|use `mysql`; create table a1(i int)engine=myisam|
……………………………………
23. Shutdown
关闭MySQL:
$ mysqladmin shutdown
重新连接:
$ mysql
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
$ cd /u01/mysql/bin
$ ./mysqld_safe &
$ mysql
24. grant option
拥有grant option,就可以将自己拥有的权限授予其他用户(仅限于自己已经拥有的权限)
mysql》 grant Grant option on pyt.* to p1@localhost;
mysql》 grant select on pyt.* to p2@localhost;
25. file
拥有file权限才可以执行 select ..into outfile和load data infile…操作,但是不要把file, process, super权限授予管理员以外的账号,这样存在严重的安全隐患。
mysql》 grant file on *.* to p1@localhost;
mysql》 load data infile ‘/home/mysql/pet.txt’ into table pet;
26. super
这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE MASTER,PURGE MASTER LOGS。
mysql》 grant super on *.* to p1@localhost;
mysql》 purge master logs before ‘mysql-bin.000006′;
27. process
通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。
mysql》 show processlist;
+—-+——+———–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——+———+——+——-+——————+
| 12 | p1 | localhost | pyt | Query | 0 | NULL | show processlist |
+—-+——+———–+——+———+——+——-+——————+
另外,
管理权限(如 super, process, file等)不能够指定某个数据库,on后面必须跟*.*
mysql》 grant super on pyt.* to p1@localhost;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql》 grant super on *.* to p1@localhost;
Query OK, 0 rows affected (0.01 sec)

手机上的DRM权限表是什么意思

drm权限表是存放drm加密文件权限的地方,你的手机中可能存有一些drm加密的图片或铃声(想了解drm的知识去网上搜索一下吧),如果是combineddelivery或separatedelivery类型的加密文件,会把它们的权限文件统一放在权限表中。
通常drm加密文件都是用户付费下载的,所以如果删除掉它,会导致drm加密的多媒体文件无法使用,需要重新购买权限,也有些手机自带的图片铃声就是drm加密过的,为了限制转发。
对于普通用户来说,只要不单独删除这个东东就可以了(有些手机可能作了保护,根本不会让你删除它),格式化通常会删除所有用户自行下载的权限和drm加密文件,但是不会影响手机自带的加密文件及其对应的权限,所以,只要你确认自己下载的文件都是不需要的,就可以做格式化。