Skip to main content

SQL Server 2014 SP3 创建一个受限用户账号

SQL Server 2014 SP3 中,你可以通过以下步骤创建一个受限用户账号,使其:

只能访问指定数据库(如 SZHW
只能对特定表(如 SZCIS)进行 SELECT / INSERT / UPDATE
不能 DELETE 数据
不能修改表结构、不能访问其他表


✅ 实现步骤(使用 SSMS 或 T-SQL)

🔹 步骤 1:创建登录名(Login)

-- 创建 SQL Server 登录名(服务器级别)
CREATE LOGIN [limited_user] WITH PASSWORD = 'StrongPassword123!';

💡 建议密码符合复杂性要求。


🔹 步骤 2:在目标数据库中创建用户(User)

USE [SZHW];  -- 切换到你的数据库

-- 将登录名映射为数据库用户
CREATE USER [limited_user] FOR LOGIN [limited_user];

🔹 步骤 3:授予 SELECT, INSERT, UPDATE 权限(仅限指定表)

-- 授予对 SZCIS 表的读写权限(不含 DELETE)
GRANT SELECT, INSERT, UPDATE ON OBJECT::dbo.SZCIS TO [limited_user];

⚠️ 注意:OBJECT::dbo.SZCIS 是完整对象引用格式。


🔹 步骤 4:显式拒绝 DELETE 权限(防止意外继承)

-- 明确禁止删除操作
DENY DELETE ON OBJECT::dbo.SZCIS TO [limited_user];

DENY 优先级高于 GRANT,即使以后加入角色也不会有 DELETE 权限。


🔹 步骤 5:(可选)限制不能访问其他表

默认情况下,新用户 没有任何权限,所以只要不授予权限,就无法访问其他表。

但为了更安全,可以:

方法 A:不将用户加入任何角色(推荐)

  • 不要加入 db_datareaderdb_datawriter 等内置角色
  • 只按需授权特定表

方法 B:显式拒绝所有其他表(不必要,但更严格)

-- 拒绝访问其他表(示例)
DENY SELECT, INSERT, UPDATE, DELETE ON OBJECT::dbo.OtherTable TO [limited_user];

🔹 步骤 6:测试权限

用新账号连接后执行:

✅ 允许的操作:

SELECT * FROM dbo.SZCIS;
INSERT INTO dbo.SZCIS (Part_Number, Description) VALUES ('TEST001', 'Test Part');
UPDATE dbo.SZCIS SET Description = 'Updated' WHERE Part_Number = 'TEST001';

❌ 被拒绝的操作:

DELETE FROM dbo.SZCIS WHERE Part_Number = 'TEST001';  -- 报错:权限被拒绝
SELECT * FROM dbo.OtherTable;  -- 报错:对象无权限

🛡️ 安全最佳实践

建议 说明
不要使用 sa 账号做应用连接 应使用最小权限账号
密码定期更换 使用强密码策略
限制 IP 访问(网络层) 在防火墙或 SQL Server 配置中限制来源 IP
启用登录审计 监控异常登录行为

🧩 扩展:如果需要多个表?

只需重复 GRANTDENY

-- 授权多张表
GRANT SELECT, INSERT, UPDATE ON OBJECT::dbo.Table1 TO [limited_user];
GRANT SELECT, INSERT, UPDATE ON OBJECT::dbo.Table2 TO [limited_user];

-- 拒绝删除
DENY DELETE ON OBJECT::dbo.Table1 TO [limited_user];
DENY DELETE ON OBJECT::dbo.Table2 TO [limited_user];

📌 总结命令(一键复制)

-- 1. 创建登录名
CREATE LOGIN [limited_user] WITH PASSWORD = 'YourSecurePassword!';

-- 2. 在数据库中创建用户
USE [SZHW];
CREATE USER [limited_user] FOR LOGIN [limited_user];

-- 3. 授予指定表的读写权限(不含删除)
GRANT SELECT, INSERT, UPDATE ON OBJECT::dbo.SZCIS TO [limited_user];

-- 4. 显式拒绝删除权限
DENY DELETE ON OBJECT::dbo.SZCIS TO [limited_user];

✅ 完成!该账号现在只能对 SZCIS 表进行增、改、查,不能删,也不能访问其他表。


❓常见问题

Q:能否只允许修改某些字段?
A:SQL Server 不支持列级 UPDATE 权限(除 VIEW 外)。
✅ 替代方案:创建一个 视图(View),只包含可编辑字段,并在视图上授权。

Q:用户能执行存储过程吗?
A:默认不能。如需调用,需单独授权:

GRANT EXECUTE ON dbo.YourProc TO [limited_user];

如有需要,我也可以帮你生成 只读账号基于视图的受限账号。欢迎继续提问!