2 个版本
0.1.0 |
|
---|---|
0.0.1-beta.3 | 2021 年 12 月 10 日 |
0.0.1-beta.2 | 2021 年 12 月 6 日 |
0.0.1-beta.1 |
|
在 数据库接口 中排名第 1089
94KB
2K SLoC
grant.rs
一个开源项目,旨在以 GitOps 风格管理 Redshift 数据库角色和权限,使用 Rust 编写。
该项目仍处于开发初期,尚未准备好用于任何类型的生产使用或 alpha/beta 测试。
使用方法
从 crates.io 安装二进制文件
cargo install grant
使用 grant
工具
$ grant --help
grant 0.0.1-beta.2
Manage database roles and privileges in GitOps style
USAGE:
grant <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
apply Apply a configuration to a redshift by file name. Yaml format are accepted
gen Generate sample configuration file
gen-pass Generate random password
help Prints this message or the help of the given subcommand(s)
inspect Inspect current database cluster with connection info from configuration file
validate Validate a configuration file or a target directory that contains configuration files
生成项目结构
grant gen --target ./cluster
Creating path: "./cluster"
Generated: "./cluster/config.yml"
应用权限更改
./examples/example.yaml
的内容
connection:
type: "postgres"
# support environment variables, e.g. postgres://${HOSTNAME}:5432
url: "postgres://postgres@localhost:5432/postgres"
roles:
- name: role_database_level
type: database
grants:
- CREATE
- TEMP
databases:
- postgres
- name: role_schema_level
type: schema
grants:
- CREATE
databases:
- postgres
schemas:
- public
- name: role_all_schema
type: table
grants:
- SELECT
- INSERT
- UPDATE
databases:
- postgres
schemas:
- public
tables:
- ALL
users:
- name: duyet
password: 1234567890 # password in plaintext
roles:
- role_database_level
- role_all_schema
- role_schema_level
- name: duyet2
password: md58243e8f5dfb84bbd851de920e28f596f # support md5 style: grant gen-pass -u duyet2
roles:
- role_database_level
- role_all_schema
- role_schema_level
将此配置应用到集群
grant apply -f ./examples/example.yaml
[2021-12-06T14:37:03Z INFO grant::connection] Connected to database: postgres://postgres@localhost:5432/postgres
[2021-12-06T14:37:03Z INFO grant::apply] Summary:
┌────────────┬───────────────────────────┐
│ User │ Action │
│ --- │ --- │
│ duyet │ update password │
│ duyet2 │ update password │
└────────────┴───────────────────────────┘
[2021-12-06T14:37:03Z INFO grant::apply] Summary:
┌────────┬───────────────────────────────────────────────────────────┬─────────┐
│ User │ Database Privilege │ Action │
│ --- │ --- │ --- │
│ duyet │ privileges `role_database_level` for database: ["postgre+ │ updated │
│ duyet2 │ privileges `role_database_level` for database: ["postgre+ │ updated │
└────────┴───────────────────────────────────────────────────────────┴─────────┘
[2021-12-06T14:37:03Z INFO grant::apply] Summary:
┌────────┬───────────────────────────────────────────────────────┬─────────┐
│ User │ Schema Privileges │ Action │
│ --- │ --- │ --- │
│ duyet │ privileges `role_schema_level` for schema: ["public"] │ updated │
│ duyet2 │ privileges `role_schema_level` for schema: ["public"] │ updated │
└────────┴───────────────────────────────────────────────────────┴─────────┘
[2021-12-06T14:37:03Z INFO grant::apply] Summary:
┌────────┬─────────────────────────────────────────────────┬─────────┐
│ User │ Table Privileges │ Action │
│ --- │ --- │ --- │
│ duyet │ privileges `role_all_schema` for table: ["ALL"] │ updated │
│ duyet2 │ privileges `role_all_schema` for table: ["ALL"] │ updated │
└────────┴─────────────────────────────────────────────────┴─────────┘
生成随机密码
$ grant gen-pass
Generated password: q)ItTjN$EXlkF@Tl
$ grant gen-pass --user duyet
Generated password: o^b3aD1L$xLm%#~U
Generated MD5 (user: duyet): md58243e8f5dfb84bbd851de920e28f596f
检查当前集群
$ grant inspect -f examples/example.yaml
[2021-11-29T07:46:44Z INFO grant::inspect] Current users in postgres://postgres@localhost:5432/postgres:
┌────────────┬──────────┬───────┬──────────┐
│ User │ CreateDB │ Super │ Password │
│ --- │ --- │ --- │ --- │
│ postgres │ true │ true │ ******** │
│ duyet │ false │ false │ ******** │
└────────────┴──────────┴───────┴──────────┘
开发
克隆存储库
git clone https://github.com/duyet/grant.rs && cd grant.rs
测试需要 Postgres,可能需要使用 docker-compose.yaml
docker-compose up -d
确保您已连接到 postgres://postgres:postgres@localhost:5432/postgres
。
在 MacOS 上,最简单的方法是安装 Postgres.app。
运行单元测试
cargo test
待办事项
- 支持从环境变量读取连接信息
- 支持在 Git 中存储加密密码
- 支持 Postgres 和 Redshift
- 支持更改密码
- 可视化(谁可以看到什么?)
- 应用显示更多关于差异更改的详细信息
- 检查显示更多关于用户权限的详细信息
许可证
MIT
依赖项
~16–27MB
~379K SLoC