场景: 我有一个 WPF 桌面应用程序,它将分布在不同客户的不同计算机上。该应用程序有一个 XML 配置文件“ApplicationConfiguration.xml”, 此 XML 文件包含连接字符串。我需要加密这些连接字符串,因为 ApplicationConfiguration.xml 文件将与主应用程序 exe 一起复制到应用程序的安装文件夹中。
计划策略:我的计划策略是在安装后 加密“ApplicationConfiguration.xml”文件。(如果我能在安装过程中完成那就更好了)
我尝试过的: 按照安装后加密 xml 文件的策略,我决定编写一个简单的 winforms 应用程序,以允许用户浏览“ApplicationConfiguration.xml”,然后只需按一个按钮即可对其进行加密。当我这样做时,我得到了一个以 xml 配置文件形式创建的新文件。 'ApplicationConfiguration.xml.Config',但原始的'ApplicationConfiguration.xml'文件仍然保持不变,连接字符串未受影响...现在......当我将此文件的内容复制到我的 'ApplicationConfiguration.xml' 文件中时程序能够正常运行……记住,XML 现在已加密。因此,.NET 4.0 框架似乎可以解密 xml 文件,而无需我在 WPF 应用程序中编写更多代码。
请参阅下面的代码进行加密:
protected void EncryptConfig(Boolean bEncrypt)
{
string path = SelectedFilePath();
Configuration config = ConfigurationManager.OpenExeConfiguration(path);
// Define the Rsa provider name.
const string provider = "RsaProtectedConfigurationProvider";
// Get the section to protect.
ConfigurationSection connStrings = config.ConnectionStrings;
if (connStrings != null)
{ …Run Code Online (Sandbox Code Playgroud) 我在 Azure 中有一个 WorkerRole,它连接到 MSSQL 数据库(也在 Azure 中,在其自己的虚拟机上 - 换句话说,不是 Azure SQL 数据库)。WorkerRole 使用 EntityFramework(代码优先)。
我的连接字符串如下所示,来自辅助角色的连接在我的开发环境中工作得很好:
<add name="MyConnectionString" connectionString="Data Source=mydatabaseserver.cloudapp.net;Initial Catalog=MyDatabase;User ID=MyUser;Password=ThePassword;" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
但是,应用程序会抛出错误:
The connection string MyConnectionString in the application's configuration file does not contain the required providerName attribute
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它显然包含providerName 属性。我已检查 obj/Release 文件夹以查看发布到 Azure 的实际配置文件,它也包含该属性。
我究竟做错了什么?
我已在所有项目上安装 EF 版本 6.1.3。然后我创建了一个模型类、一个上下文类,并在我的本地计算机上安装了一个 MSSQL 数据库(我没有做任何其他事情)。一切都很完美(不知何故它知道我的本地数据库)。
型号类别:
public class Account
{
public int Id { get; set; }
public string Name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
数据上下文类:
public class MyClassDataContext: DbContext
{
public DbSet<Account> Accounts{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
应用程序配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=xxxxxx" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
Run Code Online (Sandbox Code Playgroud)
然后我尝试将其移动到远程数据库,但它不起作用。我尝试了一切。 …
c# sql-server entity-framework connection-string remote-server
我有一个 Asp.net MVC5 应用程序并将其发布到Microsoft Azure. 我首先将我的.mdf文件迁移到Sql Azure Databases. 中提供的数据库连接字符串Azure Portal不起作用。
[ArgumentException:不支持关键字:“服务器”。]
我的连接字符串如下web.config
connectionString="
Server=tcp:dbprojectserver.database.windows.net,1433;
Initial Catalog=db_project;
Persist Security Info=False;
User ID=username@servername;
Password=kenth&&123;
Encrypt=True;
TrustServerCertificate=False;
Connection Timeout=30;
"
Run Code Online (Sandbox Code Playgroud)
我相信这个连接字符串有问题。任何有关此方面的帮助都将受到高度赞赏。
编辑
从此处读取SQL Server 连接字符串并遵循 EF Db First 或 Model First 连接字符串示例
<add name="ConnectionStringName"
providerName="System.Data.EntityClient"
connectionString="metadata=res://*/ ContextClass.csdl|res://*/ ContextClass.ssdl|res://*/ ContextClass.msl;provider=System.Data.SqlClient;provider connection string="Data Source=ServerName;Integrated Security=False;User Id=userid;Password=password;MultipleActiveResultSets=True"" />
Run Code Online (Sandbox Code Playgroud)
这就是我根据上面的例子使用的
<add name="ProjectEntities" connectionString="metadata=res://*/ ProjectWeb.Models.User.csdl|res://*/ ProjectWeb.Models.User.ssdl|res://*/ ProjectWeb.Models.User.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:dbprojectserver.database.windows.net,1433;Integrated Security=False;User Id=username@servername;Password=kenth$$123;MultipleActiveResultSets=True"
" providerName="System.Data.EntityClient"/>
Run Code Online (Sandbox Code Playgroud)
它说
不支持关键字“数据源”
我在 Visual Studio 中开发了一个 Azure Function,并且在 Azure 中发布时它可以工作(从一年前开始)。
现在,我在 Visual Studio 中从该 Azure 函数制作了一个模板,并更改了一些细节,但基本上是相同的。当我在本地测试时,效果很好。
但是当我在 Azure 中发布它并尝试测试它时,我收到此错误:
The ConnectionString property has not been initialized
Run Code Online (Sandbox Code Playgroud)
我通常在应用程序设置中编写连接字符串(它适用于较旧的 Azure 功能)。
以下是该函数如何获取连接字符串的值:
var repo = new GranularRepository(ConfigurationManager.AppSettings["BoConnectionString"]);
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
var repo = new AvgDeliveryTime_GranularRepository(Environment.GetEnvironmentVariable("BodbConnectionString"));
Run Code Online (Sandbox Code Playgroud) 我有一个在 Docker 容器中运行的 Azure 函数。该功能需要使用Azure服务总线。所以我的函数是使用属性“ServiceBusAccount”来获取服务总线连接字符串
[FunctionName("MyFunc")]
[ServiceBusAccount("ServiceBusConnectionString")]
public async Task MyFunc(...)
...
Run Code Online (Sandbox Code Playgroud)
在配置生成器中,我运行以下代码以从 Azure Key Vault 获取一些值(包括服务总线连接字符串):
var configBuilder = new ConfigurationBuilder();
var config = configBuilder.AddAzureKeyVault($"https://{config["keyVaultName"]}.vault.azure.net", config["keyVaultClientId"], config["keyVaultSecret"])
.Build();
Run Code Online (Sandbox Code Playgroud)
问题是,当主机启动时,我首先收到警告:
“警告:找不到名为“ServiceBusConnectionString”的值”
然后在我的函数被发现后我得到了这个错误:
发生主机错误。Microsoft.Azure.WebJobs.ServiceBus:Microsoft Azure WebJobs SDK ServiceBus 连接字符串“ServiceBusConnectionString”丢失或为空
我的理解是,主机环境正在尝试在启动函数之前以及在项目的启动类中调用配置生成器之前获取服务总线连接字符串。
有没有办法在运行时设置服务总线连接字符串?
编辑
如果您使用的是 Azure DevOps,这应该有助于解决此问题https://daniel-krzyczkowski.github.io/How-to-inject-Azure-Key-Vault-secrets-in-the-Azure-DevOps-CICD-pipelines /
connection-string azureservicebus azure-keyvault azure-functions
是否有 python 函数来检索 blob 存储帐户连接字符串?
az cli或检索 SAS 令牌python?谢谢
连接到 Azure 中 SQL Server 数据库的原始(工作正常)docker 文件如下所示:
version: '3.4'
services:
my.service:
build:
dockerfile: Test/Test/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
- MyDatabase__ConnectionString=Server=tcp:xxx.windows.net,1433;Initial Catalog=my-catalog;User ID=SA@dbs;Password='xxx';Persist Security Info=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30
Run Code Online (Sandbox Code Playgroud)
如果我想连接到本地 SQL Server Express,“MyDatabase__ConnectionString”应该是什么?
我尝试了这些选项,但没有一个起作用?
tcp:host.docker.internal\\SQLEXPRESS,1433;***tcp:host.docker.internal\\SQLEXPRESS;***tcp:localhost\\SQLEXPRESS,1433;***host.docker.internal\\SQLEXPRESS,1433;***host.docker.internal\\SQLEXPRESS;***localhost\\SQLEXPRESS;***另请注意,我的本地 SQL Server Express 已启用 TCP:
有没有办法通过连接字符串强制与 mongodb 的连接为只读?我不想在每个环境中创建只读用户来运行一些我想确保不会更改数据库的测试
我正在尝试 Dapper,偶然发现了这个异常:
System.InvalidOperationException: The ConnectionString property has not been initialized.
...
Run Code Online (Sandbox Code Playgroud)
这是代码:
public IEnumerable<T> GetAll<T>(string sql, DynamicParameters parameters, string connectionString, CommandType commandType = CommandType.StoredProcedure)
{
using IDbConnection db = new SqlConnection(connectionString);
var result = db.Query<T>(sql, parameters, commandType: commandType, commandTimeout: COMMAND_TIMEOUT, buffered: false);
return result;
}
Run Code Online (Sandbox Code Playgroud)
当我删除buffered参数时,一切正常。
var result = db.Query<T>(sql, parameters, commandType: commandType, commandTimeout: COMMAND_TIMEOUT);
Run Code Online (Sandbox Code Playgroud) azure ×4
c# ×2
asp.net-mvc ×1
dapper ×1
deployment ×1
docker ×1
encryption ×1
mongodb ×1
python ×1
readonly ×1
security ×1
sql ×1
sql-server ×1
sqlexception ×1
wpf ×1