Could not read from System Tables. You must grant SELECT access on all system tables for the databas

本文介绍如何使用MySQL Workbench从Microsoft Access迁移数据库至MySQL。主要内容包括执行特定的权限授予语句来确保新环境中数据库对象的正确访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://dev.mysql.com/doc/workbench/en/wb-migration-database-access.html

http://mysqlworkbench.org/2014/08/how-to-guide-to-database-migration-from-ms-access-using-mysql-workbench/

参考上面两篇文章

主要在VB中执行下面这句话

CurrentProject.Connection.Execute “GRANT SELECT ON MSysRelationships TO Admin”


<think>我们解析这两条SQL语句:1.`GRANTUSAGEONSCHEMAsystemTOeverzbzdevelopbasicadmin;`2.`GRANTSELECTONALLTABLESINSCHEMAsystemTOeverzbzdevelopbasicadmin;`这两条语句都是在PostgreSQL数据库中的授权语句,用于给用户(或角色)授予特定权限。首先,我们逐条解析:第一条语句:```sqlGRANTUSAGEONSCHEMAsystemTOeverzbzdevelopbasicadmin;```-`GRANTUSAGE`:这是授权语句,表示授予“使用”权限。-`ONSCHEMAsystem`:指定权限的对象是名为`system`的模式(schema)。-`TOeverzbzdevelopbasicadmin`:将权限授予给名为`everzbzdevelopbasicadmin`的用户(或角色)。在PostgreSQL中,模式(schema)是数据库对象的容器(如表、视图、函数等的命名空间)。`USAGE`权限允许被授权者访问该模式中的对象。但是,仅仅有`USAGE`权限并不足以访问模式中的表或其他对象,它只是允许用户“使用”这个模式,即用户可以在该模式下创建对象(如果用户有创建对象的权限)或者访问已经存在的对象(如果用户有这些对象的相应权限)。换句话说,`USAGE`是访问模式内对象的先决条件,但具体对对象的操作还需要单独的权限(比如SELECT、INSERT等)。第二条语句:```sqlGRANTSELECTONALLTABLESINSCHEMAsystemTOeverzbzdevelopbasicadmin;```-`GRANTSELECT`:授予查询(SELECT)权限。-`ONALLTABLESINSCHEMAsystem`:指定权限的对象是模式`system`中的所有表(包括现有表)。-`TOeverzbzdevelopbasicadmin`:将权限授予给用户`everzbzdevelopbasicadmin`.这条语句的作用是让用户`everzbzdevelopbasicadmin`能够查询模式`system`下的所有表(包括以后创建的表,注意这里使用了`ALLTABLES`,它只针对当前已有的表,如果要包括未来创建的表,需要使用`ALTERDEFAULTPRIVILEGES`)。综合来看,这两条语句一起完成了以下授权:1.允许用户`everzbzdevelopbasicadmin`使用模式`system`(通过`USAGE`权限)。2.允许该用户对模式`system`中的所有表执行`SELECT`操作(即查询表的数据)。因此,用户`everzbzdevelopbasicadmin`现在可以:-连接到包含模式`system`的数据库(前提是用户有该数据库的`CONNECT`权限)。-查看模式`system`中的表(需要有`USAGE`权限才能看到模式,然后还需要有对表的`SELECT`权限才能查询表)。-执行`SELECT`语句查询这些表中的数据。但是,用户不能:-修改(INSERT/UPDATE/DELETE)这些表的数据(因为没有授予这些权限)。-创建新表或修改表结构(因为没有授予`CREATE`或`ALTER`权限)。注意:如果模式中有其他对象(如视图、序列、函数等),这些语句也没有授予相关权限。例如,要允许用户使用序列,需要单独授予序列的`USAGE`权限;对于函数,需要`EXECUTE`权限。另外,上述授权只针对当前已有的表。如果后续在模式`system`中创建了新表,那么用户默认是没有`SELECT`权限的。为了自动授予新表权限,可以使用默认权限(defaultprivileges)设置:```sqlALTERDEFAULTPRIVILEGESINSCHEMAsystemGRANTSELECTONTABLESTOeverzbzdevelopbasicadmin;```这样,以后在模式`system`中创建的表都会自动授予`SELECT`权限给该用户。总结:这两条语句是给用户`everzbzdevelopbasicadmin`授予对模式`system`的访问权限和其中所有表的只读权限。接下来,我们按照要求提出相关问题。</think>## PostgreSQL 授权语句解析:SCHEMA USAGE 和 TABLE SELECT ### 语句解析 #### 1. `GRANT USAGE ON SCHEMA system TO everzbzdevelopbasicadmin;` **功能解释:** - 授予用户 `everzbzdevelopbasicadmin` 对 `system` 模式的**基本访问权限** - `USAGE` 权限允许用户: - 查看模式中的对象(表、视图、序列等) - 引用模式中的对象 - 使用模式中的数据类型 - 访问模式中的函数(但需要额外的 `EXECUTE` 权限) **关键点:** - 这是访问模式内对象的**先决条件** - 没有 `USAGE` 权限,用户无法看到或访问模式中的任何对象 - 不包含对具体对象的操作权限 #### 2. `GRANT SELECT ON ALL TABLES IN SCHEMA system TO everzbzdevelopbasicadmin;` **功能解释:** - 授予用户 `everzbzdevelopbasicadmin` 对 `system` 模式中**所有表**的**查询权限** - `SELECT` 权限允许用户: - 查询表中的数据 (`SELECT`) - 使用表中的数据创建视图 - 在查询中引用表(如 JOIN 操作) **关键点:** - 仅适用于**当前已存在**的表 - 不包含对**未来新建表**的权限(需要 `ALTER DEFAULT PRIVILEGES`) - 不包含写操作权限(`INSERT`, `UPDATE`, `DELETE`) ### 权限组合效果 这两条语句组合后,用户 `everzbzdevelopbasicadmin` 获得: 1. 访问 `system` 模式的权限(`USAGE`) 2. 查询 `system` 模式中所有表的权限(`SELECT`) 用户可以执行: ```sql -- 查看system模式中的表 SELECT * FROM system.tables; -- 查询任意表的数据 SELECT * FROM system.users; SELECT * FROM system.logs; ``` 但**不能**执行: ```sql -- 修改数据(缺少INSERT/UPDATE/DELETE权限) INSERT INTO system.users (...) VALUES (...); -- 创建新表(缺少CREATE权限) CREATE TABLE system.new_table (...); -- 访问序列(缺少USAGE权限) SELECT nextval('system.user_id_seq'); ``` ### 权限验证查询 ```sql -- 验证模式权限 SELECT nspname, privilege_type FROM pg_namespace JOIN aclexplode(nspacl) ON oid = nspacl WHERE nspname = 'system' AND grantee = (SELECT oid FROM pg_roles WHERE rolname = 'everzbzdevelopbasicadmin'); -- 验证表权限 SELECT table_schema, table_name, privilege_type FROM information_schema.table_privileges WHERE grantee = 'everzbzdevelopbasicadmin' AND table_schema = 'system'; ``` ### 权限补充建议 如果需要更完整的访问权限,可考虑添加: ```sql -- 授予序列权限 GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA system TO everzbzdevelopbasicadmin; -- 授予函数执行权限 GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA system TO everzbzdevelopbasicadmin; -- 设置未来对象的默认权限 ALTER DEFAULT PRIVILEGES IN SCHEMA system GRANT SELECT ON TABLES TO everzbzdevelopbasicadmin; ALTER DEFAULT PRIVILEGES IN SCHEMA system GRANT USAGE, SELECT ON SEQUENCES TO everzbzdevelopbasicadmin; ``` ### 权限管理最佳实践 1. **最小权限原则**:只授予必要权限 ```sql GRANT SELECT ON TABLE system.logs TO audit_user; ``` 2. **角色管理**:使用角色集中管理权限 ```sql CREATE ROLE system_reader; GRANT USAGE ON SCHEMA system TO system_reader; GRANT SELECT ON ALL TABLES IN SCHEMA system TO system_reader; GRANT system_reader TO everzbzdevelopbasicadmin; ``` 3. **定期审计**: ```sql -- 检查用户权限 SELECT * FROM information_schema.role_table_grants WHERE grantee = 'everzbzdevelopbasicadmin'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值