mariadb 如何在访问被拒绝时跳过当前SQL查询?

zphenhs4  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(121)

我有一个数据库,其中有一个用于我的Web应用程序的用户。该用户只有SELECT、DROP和CREATE权限。
我用fastAPI编写了一个小的API,它接受文件并对它做一些小的清理工作。
(EDIT SQL文件如下所示:

CREATE TABLE IF NOT EXISTS users (
  id INT PRIMARY KEY,
  name varchar(255) NOT NULL,
  email varchar(255) NOT NULL UNIQUE,
  password varchar(255) NOT NULL
);

INSERT into users (id, name, email, password) VALUES (1, 'test', 'test@gmail.com', 'password');

CREATE TABLE IF NOT EXISTS books (
  id INT PRIMARY KEY,
  name varchar(255) NOT NULL,
  price int not null,
  authorName varchar(255) NOT NULL
);

create table if not exists orders (
  id INT PRIMARY KEY,
  userId INT NOT NULL,
  bookId INT NOT NULL,
  quantity INT NOT NULL
);

create table if not exists adventureBookings(
    id INT PRIMARY KEY,
    country varchar(255) NOT NULL,
    city varchar(255) NOT NULL,
    price int not null
);

它被读取,然后保存为字符串。然后,具有有限权限的用户webApp将一次执行所有这些SQL-Queries,但由于不允许他执行插入操作,因此数据库将抛出错误,SQL-Skript的执行将停止
因此,将执行为用户创建表,然后执行不允许的插入操作,并且不会创建表books、orders和adventureBookings。
问题是:是否有一个设置mysql服务器只是忽略拒绝的错误,或者我可以做些什么来确保所有的表将得到执行,或者我应该尝试其他的东西?

klsxnrf1

klsxnrf11#

您可以在执行前剖析SQL陈述式,或忽略例外状况:

import mariadb

....

for line in lines:
    try:
        cursor.execute(line)
    except Exception as err:
        if err.errno == ERR.ER_ACCESS_DENIED:
            pass

相关问题