月度归档:2024年07月

Nginx配置Basic Authentication认证

生成认证文件

方法1

安装工具

# debian
sudo apt install apache2-utils
# redhat
sudo yum install -y httpd-tools

创建认证文件,-c是创建新的文件

sudo htpasswd -c ./htpasswd user1
# 按提示输入user1的密码
# 也可以直接在命令中输入密码,加上-b参数
sudo htpasswd -cb ./htpasswd user1 password
# 添加额外的用户
sudo htpasswd -c ./htpasswd user2

htpasswd文件示例内容如下

$ cat htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

方法2

openssl passwd -apr1 password

创建htpasswd文件,将上述密码加入到 htpasswd,格式如下,其中 user1 是用户名

# 允许使用#来注释
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0:允许在第二个冒号之后加注释

配置 nginx

单路径匹配

location /api {
  # 显示给用户的提示,有空格等符号时必须使用单/双引号
  auth_basic secure;
  # 加密文件
  auth_basic_user_file /etc/nginx/htpasswd;
}

整个服务生效

server {
  ...
  auth_basic secure;
  auth_basic_user_file /etc/nginx/htpasswd;

  location /public/ {
      auth_basic off;
  }
}

给PGSQL添加只读用户

-- 1. 创建新用户readonly
CREATE ROLE readonly LOGIN PASSWORD 'passwd';

-- 2. 授予readonly用户对mydb1数据库的只读权限
-- 首先授予连接权限
GRANT CONNECT ON DATABASE mydb1 TO readonly;

-- 进入需要授权的数据库(PGADMIN等软件需要提前进入管理数据库)
\c mydb1

-- 然后为mydb1数据库中的所有表授予SELECT权限
-- 这里的假设是所有表都在public模式下,如果不是,需要指定正确的模式
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

-- 如果需要包括未来创建的表,使用以下命令
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;