
[英]How to create new user for SQL Server 2017 Management Studio
[英]How to disable SQL Server Management Studio for a user
有没有办法阻止用户进入SQL Server Management Studio,以便他们不能只手动编辑表行? 他们仍然需要通过运行我的应用程序来访问表。
您可以为特定用户使用DENY VIEW ANY DATABASE命令。 这是SQL Server 2008中提供的新功能。
它可以防止用户查看系统目录(sys.databases,sys.sysdatabases等),从而使SQL在SQL Management Studio(SSMS)中对它们不可见。
从主数据库运行此命令:
DENY VIEW ANY DATABASE TO 'loginName'
用户仍然可以通过您的应用程序访问数据库。 但是,如果他们通过SSMS登录,您的数据库将不会显示在数据库列表中,如果他们打开查询窗口,您的数据库将不会出现在下拉列表中。
但是,这不是万无一失的。 如果用户足够聪明以运行查询命令:
USE <YourDatabaseName>
然后他们将在查询分析器中看到数据库。
由于这个解决方案占用了90%,我会给数据库一些不起眼的名称,不要让用户知道数据库的名称。
你不必担心有访问工具他们。 只需确保他们不知道具有读/写权限的特定数据库的任何SQL登录,如果有,则更改密码。 如果他们可以通过Windows身份验证访问数据库,请确保他们处于datareader角色 。 您可以使用角色来管理用户可以在SQL中执行的操作。
我建议您锁定数据库并为用户提供适当的只读(或其他)权限。 这样,用户仍然可以使用管理工作室来运行选择查询等。
如果您不希望用户拥有任何权利,那么您也可以这样做。
您可以使用触发器。
CREATE TRIGGER [TR_LOGON_APP]
ON ALL SERVER
FOR LOGON
AS
BEGIN
DECLARE @program_name nvarchar(128)
DECLARE @host_name nvarchar(128)
SELECT @program_name = program_name,
@host_name = host_name
FROM sys.dm_exec_sessions AS c
WHERE c.session_id = @@spid
IF ORIGINAL_LOGIN() IN('YOUR_APP_LOGIN_NAME')
AND @program_name LIKE '%Management%Studio%'
BEGIN
RAISERROR('This login is for application use only.',16,1)
ROLLBACK;
END
END;
如果您的应用程序作为服务/用户帐户运行,则只有该帐户需要访问数据库。 个人用户的帐户不需要任何数据库访问权限,因此他们甚至不具有读取权限。 您的应用将成为数据的网关。
如果用户在其用户帐户下运行应用程序,则授予他们只读权限。 您只需将它们添加到db_datareader角色即可。
希望这可以帮助!
您可以拒绝'用户'对ssms.exe可执行文件的访问权限,同时授予相关用户/管理员权限。
如果您的应用程序仅使用存储过程来修改数据,则可以为最终用户提供运行存储过程的访问权限,但拒绝他们访问以修改表。
应用程序角色将允许您将数据库对象保护到应用程序而不是登录用户。
我同意Jon Erickson的一般规则
充分利用数据库角色,如果用户只应具有SELECT(读取)访问权限,则为其分配db_datareader角色。 即使他们使用SSMS登录,他们也只能执行SELECT语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.