我习惯于处理由其他人负责 SQL 数据库的合同。但是,我现在正在处理一份必须设置新 SQL Server 的合同,因此我设置了 MS SQL Server 2012 Express。
我编写了一个应用程序,用于连接到 SQL 服务器并读取/更新多个表。在我的测试环境中,该应用程序使用 sa 帐户进行连接,这当然是大忌。
我想创建一个用户帐户,该帐户将能够从有限的一组表中选择/插入/更新/删除,并且没有任何其他权限。
我会按照我在 Google 上看到的一些说明进行操作,但我不断看到有关非特权帐户意外地拥有执行帐户创建者不打算执行的操作的权限的问题,所以我想请教专家:
如何创建一个只能执行一件事的 SQL 帐户:从有限的一组表中选择/插入/更新/删除?
编辑:根据我收到的反馈,我做了一些研究并编写了以下脚本:
CREATE LOGIN ExtraUser
WITH PASSWORD = 'foobar';
USE MyDatabase;
CREATE USER ExtraUser FOR LOGIN ExtraUser;
GRANT SELECT ON dbo.abc;
GRANT SELECT ON dbo.def;
GRANT INSERT ON dbo.def;
这似乎做了我想要做的事情,但我想知道我是否可以相信该用户不能访问除了我授予他访问权限的两个表之外的任何内容。
答案1
您快完成了。添加用户db_datareader
并db_datawriter
确实授予对数据库的全局读/写访问权限。
您将需要使用GRANT
来授予对特定对象的登录访问权限。
GRANT SELECT ON dbo.Table1 TO ExtraUser
GRANT INSERT ON dbo.Table1 TO ExtraUser
GRANT UPDATE ON dbo.Table1 TO ExtraUser
GRANT DELETE ON dbo.Table1 TO ExtraUser
您还可以根据需要组合权限:
GRANT SELECT,INSERT,UPDATE,DELETE on dbo.Table1 to ExtraUser
注意:您需要对每个希望允许访问的表运行该操作
更多信息GRANT
请参见这里。
编辑:
针对您的编辑,答案是肯定的。只要您没有授予更严格的权限(例如将登录名添加到db_datareader
和db_datawriter
),它将限制该用户使用这些权限。如果您授予了这些权限,则应使用以下方法撤销这些更高级别的权限REVOKE
。