我正在尝试将 SQL Server 备份到不同用户应该有权访问的目录。为此,我创建了一个用户组,并在其中包含 mssql 用户 - 但是当我尝试创建备份时,出现“拒绝访问”错误。
这是我所做的:
- 创建用户组:
sudo groupadd sample_group`
- 将
mssql
用户添加到新组:
sudo usermod -a -G sample_group mssql
- 命令的结果
cat /etc/group | grep mssql
是:
mssql:x:999: sample_group:x:1006:mssql
- 创建目录:
sudo mkdir /tmp/backup_dir/
- 将
sample_group
用户组添加到目录并为此目录提供 previligious:
sudo chgrp sample_group /tmp/backup_dir/ 须藤 chmod 771 /tmp/backup_dir/
- 命令的结果
sudo ls -l /tmp/ | grep sample_group
是:
drwxrwx--x 2 root sample_group 4096 Feb 18 12:11 backup_dir
- 尝试在此目录中备份:
sqlcmd -U sa -P ********* -Q "备份数据库 AdventureWorks TO disk='/tmp/backup_dir/1.bak'"
->
消息 3201,级别 16,状态 1,服务器 ubuntuAutoTest,第 1 行 无法打开备份设备“/tmp/backup_dir/1.bak”。操作系统错误 5(拒绝访问。)。 消息 3013,级别 16,状态 1,服务器 ubuntuAutoTest,第 1 行
为什么没有访问权限?SQL Server 以mssql
用户身份运行。mssql
用户在sample_group
组中,该组拥有/tmp/backup_dir/
目录
笔记:
如果我使用chmod 777
,则代表mssql
用户创建备份,创建的文件归mssql
用户组所有。
如果我将mssql
用户组指定为目录的所有者,则会创建备份。
/tmp/backup_dir/
如果我代表mssql
用户( )进入目录sudo su - mssql
,那么我可以创建文件,没有任何问题,有所有权限。
对于 PostgreSQL 数据库,按照上述步骤操作没有问题。仅使用postgres
用户而不使用mssql
用户。
mssql 在获取新组之前需要再次登录。最简单的方法是重新启动该服务器。
替代解决方案:
将需要读取备份的用户添加到 sample_group,然后
测试用户是否可以读取备份(将取决于 mssql 的 umask),如果不能: