Jef*_*ock 8 sql-server sql-server-2008
有没有办法阻止用户进入SQL Server Management Studio,以便他们不能只手动编辑表行?他们仍然需要通过运行我的应用程序来访问表.
Jos*_*lio 16
您可以为特定用户使用DENY VIEW ANY DATABASE命令.这是SQL Server 2008中提供的新功能.
它可以防止用户看到系统目录(sys.databases中,sys.sysdatabases等),并且因此使得DB看不见它们在SQL管理Studio(SSMS).
从主数据库运行此命令:
DENY VIEW ANY DATABASE TO 'loginName'
Run Code Online (Sandbox Code Playgroud)
用户仍然可以通过您的应用程序访问数据库.但是,如果他们通过SSMS登录,您的数据库将不会显示在数据库列表中,如果他们打开查询窗口,您的数据库将不会出现在下拉列表中.
但是,这不是万无一失的.如果用户足够聪明以运行查询命令:
USE <YourDatabaseName>
Run Code Online (Sandbox Code Playgroud)
然后他们将在查询分析器中看到数据库.
由于这个解决方案占用了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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22160 次 |
| 最近记录: |