MySQL - 自动创建数据库,表和用户

时间:2011-05-04 19:08:51

标签: mysql batch-file

为了部署应用程序,我需要创建一个用于基本用户身份验证的数据库。为了使过程自动化,我编写了一个MySQL批处理文件:

grant all on jetty.* to 'jetty'@'localhost' identified by 'jetty';

create database if not exists jetty;
use jetty;

create table if not exists users
(
  id int unsigned not null auto_increment,
  username varchar(100) not null,
  password binary(60) not null,
  primary key(id),
  unique(username)
);

create table if not exists roles
(
  id int unsigned not null auto_increment,
  role varchar(100) not null,
  primary key(id),
  unique(role)
);

create table if not exists user_roles
(
  user_id int unsigned not null,
  role_id int unsigned not null,
  unique(user_id, role_id),
  index(user_id)
);

insert into users(username, password) values('jetty', $2a$10$YX3cYqn9nHmCOmPZBHXrQ.2nxrktB3CRYG8tXmBmmWvrDKU8uwRSe');

我第一次这样做,所以我很确定有些事情我可能做对了。用一个用户填充users表实际上是个好主意吗?要登录我的应用程序,需要有一些帐户,但我还不太确定。

另一件令我烦恼的事是grant声明。我想知道grant all是否可能不够限制。

另外,我应该在我要创建的每张桌子上检查if not exists吗?

是否有关于批处理脚本的最佳实践?

1 个答案:

答案 0 :(得分:1)

  1. 用户引导您的数据库是可以的。如果'jetty'离开,请记住更新脚本!
  2. GRANT ALL不是很严格,这是事实。更严格地锁定通常是件好事。
  3. 检查IF NOT EXISTS意味着两件事:(a)如果表已经存在,那么你的脚本不会失败[good]和(b)你不会更新现有的表[bad]。我喜欢DROP TABLE IF EXISTS然后创建表。
  4. 请确保在DROP这些表之前进行备份。

    祝你好运。