如何创建只能访问运行存储过程的登录名?

问题描述 投票:0回答:1

我有一个C# Winform应用程序,该应用程序通过存储过程与SQL Server DB进行交互。在SSMS中,如何创建仅具有运行存储过程权限的登录名?该登录名将无法查看/编辑/创建表定义等。它也只能访问单个指定的数据库。

之所以要创建这样的登录名,是因为我将Winform应用程序使用的SQL Server凭据存储在其App.config文件中。由于可以轻松读取app.config,因此,如果给定的登录名具有除存储过程以外的任何其他权限,则有恶意的任何人都可以轻松地对数据库执行不需要的操作。

sql-server ssms
1个回答
0
投票

尝试以下方法(每个SP均应重复grant execute)。并非MyStoredProcedure必须位于MyDatabase中:)

-- create login to server
create login test_user with password = 'test';
-- create user mapped to a database
use MyDatabase
go
create user test_user for login test_user;
-- grant permission to execute SP
grant execute on MyStoredProcedure to test_user 

0
投票

您可以使用以下查询,以便允许存储过程对您的用户执行权限

USE [DB]
GRANT EXECUTE ON dbo.procname TO username;

但是,以我的拙见,您应该将连接字符串固定在app.config中。也许How to store login details securely in the application config file链接可以为您提供帮助。


0
投票

对特定数据库的访问由用户在您要对其进行操作的数据库上完成。您可以找到有关用户here的更多信息。

如果创建了用户,则可以为数据库上的每个项目]执行GrantWith GrantDeny操作>>。然后,将由grantor授予/拒绝用户这些权限,默认情况下为dbouserManagement in SSMS

© www.soinside.com 2019 - 2024. All rights reserved.