周末在家折腾GBase 8a,总算把用户权限搞明白了
上周末没啥事,想学学国产数据库,就装了一套GBase 8a MPP Cluster V953单机版玩玩。之前一直用MySQL,以为权限这块应该差不多,结果真动手的时候发现好几个坑,折腾了一下午,记录一下。
第一个坑:不知道要切VC。我用root登录gccli,直接create user 'test'@'%' identified by '123';,然后grant all on testdb.* to test;,都成功了。结果退出用test用户登录,show databases;居然看不到testdb。我以为是没刷新权限,又执行了flush privileges;还是不行。后来翻了下官方手册,发现GBase 8a里用户是全局的,但权限和虚拟集群(VC)是绑定的。必须先use vc vc1;切换到目标VC,再执行grant,授权才会落到正确的VC上。试了一下,果然好了。感觉这个设计对刚上手的人很容易漏掉。
第二个坑:想试下列级权限。我建了一张学生表,有学号、姓名、身份证号、手机号、成绩等字段,想模拟一下让某个用户只能看到学号和成绩,看不到身份证号。查文档发现GBase 8a支持列级grant,语法是grant select(col1,col2) on table tb1 to user;。我写了grant select(stu_id,score) on db_test.t_student to test;,执行没报错,但用test用户一查,发现整张表都能看到,列级限制根本没生效。后来发现是因为我忘了先撤销原来的表级权限。解决方法是先用revoke all on db_test.t_student from test;收回,再重新做列级授权就好了。另外还有个坑:列名写错也不会报错,但授权实际上没起作用,得用show grants for test;仔细核对。
第三个坑:角色(role)的使用。我想创建三个用户,权限差不多,就是读几张表。一个个grant太麻烦,就试了试角色。先create role r_readonly;,然后grant select on db_test.* to r_readonly;,再把用户加入角色:grant r_readonly to user1;。结果user1登录后还是没权限,查了半天发现要激活角色。可以在登录后手动执行set role r_readonly;,也可以在创建用户时指定默认角色:create user user1 default role r_readonly;。这样登录后自动生效,省了一步操作。
最后我还试了revoke收回权限,show grants查看权限,这些都跟MySQL差不多,没啥大问题。
总结一下:GBase 8a的权限模型整体还算清晰,但VC的存在让授权步骤多了一道“切VC”的前置操作,列级权限要注意表级权限是否冲突,角色需要记得激活或设默认。周末这一下午虽然踩了不少坑,但搞明白后感觉还挺有成就感的。后面打算继续学学备份恢复和性能调优,希望能坚持下来。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526