我习惯于在其他人负责SQL数据库的合同上工作。 不过,现在我正在为一个新的SQL Serverbuild立一个合同,所以我build立了MS SQL Server 2012 Express。
我写了一个连接到SQL服务器的应用程序,并读取/更新几个表。 在我的testing环境中,应用程序使用sa帐户连接,这当然是一个很大的禁忌。
我想创build一个用户帐户,能够从一组有限的表中select/插入/更新/删除,并且没有任何其他权限。
我会跟着我在Google上看到的一些指示,但是我一直看到关于无特权帐户的问题,意外地有权做这个帐户创build者不想要的东西,所以我想问专家:
如何创build一个只能做一件事的SQL帐户:从一组有限的表中select/插入/更新/删除?
编辑:根据我收到的反馈,我做了一些研究,并写了下面的脚本:
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;
这似乎是做我想做的,但我想知道,如果我可以相信,这个用户不能访问除了我给他访问的两个表以外的任何东西。
你快到了 将用户添加到db_datareader和db_datawriter确实授予对数据库的全局读取/写入访问权限。
您将需要使用GRANT授予对特定对象的login访问权限。
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更多信息可以在这里find。
编辑:
回应你的编辑,是的。 它会限制这个用户的权限,只要你还没有给予更多压倒性的东西(比如把login添加到db_datareader和db_datawriter )。 如果你有,那么你应该使用REVOKE撤销这些更高级别的权限。