创建一个只有select 权限的用户

Oracle用户权限与同义词

添加用户NewA对用户OldB只有select 的权限步骤:

1. 新建用户

SQL> create user newA identified by"admin";

用户已创建。

SQL> grant connect,resource to newA;

授权成功。

SQL>

2.用OldB(如:scott)进行连接,用拼字符串的方式来将scott用户的select权限赋予新用户newA,并执行拼成的select串。

SQL> conn scott/admin;

已连接。

SQL> Select 'grant select onscott.'||table_name||' to newA;' from user_tables;

'GRANTSELECTONSCOTT.'||TABLE_NAME||'TONEWA;'

-------------------------------------------------------------

grant select on scott.DEPT to newA;

grant select on scott.EMP to newA;

grant select on scott.BONUS to newA;

grant select on scott.SALGRADE to newA;

SQL> grant select on scott.DEPT to newA;

授权成功。

SQL> grant select on scott.EMP to newA;

授权成功。

SQL> grant select on scott.BONUS tonewA;

授权成功。

SQL> grant select on scott.SALGRADE tonewA;

授权成功。

SQL>

或者通过命令:

SQL>grant select any table to newuser;

3. 创建同义词:拼创建同名词串,要赋予新用户create synonym的权限。

SQL> conn / as sysdba

已连接。

SQL> grant create synonym to newA;

授权成功。

SQL>

SQL> conn scott/admin;

已连接。

SQL> select 'create synonym '||table_name ||' for scott.'|| table_name ||';' fr

om user_tables;

'CREATESYNONYM'||TABLE_NAME||'FORSCOTT.'||TABLE_NAME||';'

---------------------------------------------------------------------------

create synonym DEPT for scott.DEPT;

create synonym EMP for scott.EMP;

create synonym BONUS for scott.BONUS;

create synonym SALGRADE for scott.SALGRADE;

4. 用新用户连接,执行上面创建的同名词串,然后就可以查询scott用户的所有表了,这样就跟查询自己的表一样。在实际工作中。给与其他用户对自己表的查询权限是很有用的。

SQL> conn newa/admin;

已连接。

SQL> create synonym DEPT for scott.DEPT;

同义词已创建。

SQL> create synonym EMP for scott.EMP;

同义词已创建。

SQL> create synonym BONUS forscott.BONUS;

同义词已创建。

SQL> create synonym SALGRADE forscott.SALGRADE;

同义词已创建。

SQL>

SQL> conn newa/admin;

已连接。

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

SQL> drop dept;

drop dept

*

第 1 行出现错误:

ORA-00950: 无效DROP 选项

操作结束,现在新用户newA已经对scott用户的所有表都具有了查询的权限。

-------------------------------------------------------------------------------------------------------

Blog: http://blog.youkuaiyun.com/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满)

DBA 超级群:63306533(满); DBA4 群: 83829929(满)DBA5群: 142216823(满)

DBA6 群:158654907(满) 聊天 群:40132017(满) 聊天2群:69087192(满)

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

<think>好的,我需要帮用户在MySQL 8中创建一个只有对特定数据库SELECT权限用户。首先,我得回忆一下MySQL的用户权限管理机制。记得在MySQL中,创建用户和授权是分开的步骤,特别是MySQL 8之后,可能需要先创建用户再授权。 用户提到他们想要仅对某个数据库SELECT权限,所以需要确保其他权限如INSERT、UPDATE等不被授予。根据引用[1]中的示例,使用CREATE USER和GRANT命令,其中GRANT SELECT ON database.table TO user。这里需要替换数据库名、用户名和主机部分。 另外,引用[2]提到创建用户时指定主机的重要性,比如localhost或远程访问的%。用户可能希望限制用户只能从特定主机连接,比如本地或者某个IP段,这需要在CREATE USER语句中正确设置。 还要注意MySQL 8的语法变化,引用[3]中提到的错误可能是因为旧语法如GRANT同时创建用户的方式在8.0中不再适用,必须先创建用户再授权。比如,不能像以前那样用GRANT直接创建用户,需要分开执行CREATE USER和GRANT。 接下来,我需要组合这些步骤。首先创建用户,然后授予SELECT权限。确保正确指定数据库名称和表名,如果用户需要访问整个数据库的所有表,可以使用database.*的形式。 最后,可能需要刷新权限使更改生效,但根据MySQL 8的文档,GRANT之后通常会自动生效,不过加上FLUSH PRIVILEGES也是一个好习惯,尤其是在手动修改权限表的情况下。不过根据最佳实践,如果使用GRANT语句,可能不需要显式刷新。 总结步骤应该是: 1. 创建用户,设置密码和主机。 2. 授予对特定数据库SELECT权限。 3. 可选地刷新权限。 需要验证语法是否正确,确保没有使用过时的语句,比如在CREATE USER时是否必须使用IDENTIFIED BY,以及权限是否仅限于SELECT。</think>在 MySQL 8 中创建仅对特定数据库拥有 SELECT 权限用户,需按以下两步操作: --- ### 步骤 1: 创建用户 ```sql CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'your_password'; ``` - `new_user` 替换为用户名 - `your_password` 替换为密码 - `localhost` 表示仅允许本地连接(远程访问需改为 `%` 或具体IP) --- ### 步骤 2: 授予 SELECT 权限 ```sql GRANT SELECT ON target_database.* TO 'new_user'@'localhost'; ``` - `target_database` 替换为需授权的数据库名 - `.*` 表示该数据库下所有表 --- ### 完整示例 ```sql -- 创建用户 CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'SecurePass123!'; -- 授予 SELECT 权限 GRANT SELECT ON sales_data.* TO 'readonly_user'@'%'; -- 刷新权限(MySQL 8 中非必须但建议) FLUSH PRIVILEGES; ``` --- ### 关键说明 1. 权限最小化原则:仅授予 SELECT 权限,确保用户无法修改数据[^1] 2. 主机限制:`@'%'` 允许远程连接,`@'localhost'` 限制本地访问[^2] 3. MySQL 8 必须分开执行 `CREATE USER` 和 `GRANT`,旧版本合并语法已失效[^3] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值