如何创build只能执行某些操作的SQL帐户?

我习惯于在其他人负责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_datareaderdb_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_datareaderdb_datawriter )。 如果你有,那么你应该使用REVOKE撤销这些更高级别的权限。