我有一个C# Winform
应用程序,该应用程序通过存储过程与SQL Server
DB进行交互。在SSMS中,如何创建仅具有运行存储过程权限的登录名?该登录名将无法查看/编辑/创建表定义等。它也只能访问单个指定的数据库。
之所以要创建这样的登录名,是因为我将Winform应用程序使用的SQL Server凭据存储在其App.config
文件中。由于可以轻松读取app.config,因此,如果给定的登录名具有除存储过程以外的任何其他权限,则有恶意的任何人都可以轻松地对数据库执行不需要的操作。
尝试以下方法(每个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
您可以使用以下查询,以便允许存储过程对您的用户执行权限
USE [DB]
GRANT EXECUTE ON dbo.procname TO username;
但是,以我的拙见,您应该将连接字符串固定在app.config中。也许How to store login details securely in the application config file链接可以为您提供帮助。
对特定数据库的访问由用户在您要对其进行操作的数据库上完成。您可以找到有关用户here的更多信息。
如果创建了用户,则可以为数据库上的每个项目]执行Grant
,With Grant
和Deny
操作>>。然后,将由grantor授予/拒绝用户这些权限,默认情况下为dbo
。