小编Dis*_*ned的帖子

从证书创建登录的目的是什么?

SQL Server提供了从证书创建登录的选项.例如

USE MASTER;
CREATE CERTIFICATE <certificateName>
    WITH SUBJECT = '<loginName> certificate in master database',
    EXPIRY_DATE = '12/05/2025';
GO
CREATE LOGIN <loginName> FROM CERTIFICATE <certificateName>;
GO
Run Code Online (Sandbox Code Playgroud)

但是,文档说明(强调我的):

从证书或非对称密钥创建的登录仅用于代码签名.它们不能用于连接SQL Server.只有在master中已存在证书或非对称密钥时,才能从证书或非对称密钥创建登录.

创建无法用于连接服务器的登录有什么意义?


背景

我们需要对中间层应用程序进行一些安全性更改.特别是它如何连接到它的数据库.规定的权力规定:"我们不能使用Windows身份验证".
我知道这通常是首选方法,但是有权访问中间层服务器的任何人都可以获得与应用程序相同的数据库访问权限.

如果我们使用SQL身份验证,我们需要:

  • 加密密码.
  • 将其存储在配置文件/注册表中.
  • 然后在应用程序需要连接到数据库时解密密码.

虽然以上是可能的,但我有点希望:

  • 我可以使用基于证书的登录.
  • 在构建过程中将证书与应用程序相关联.
  • 并使用它来连接到SQL Server.

来自文件的上述摘录似乎与此相矛盾.

sql-server authentication client-certificates ssl-certificate

13
推荐指数
1
解决办法
8079
查看次数

为什么在Delphi中使用FillChar将Currency变量视为常量?

以下代码应该编译并使用许多其他类型进行编译.
但是,编译器报告"Constant对象不能作为var参数传递"错误 - 尽管变量显然是一个变量.

program CurrencyConstant;
{$APPTYPE CONSOLE}
var
  GVar: Currency;
begin
  FillChar(GVar, SizeOf(GVar), 0);
end.
Run Code Online (Sandbox Code Playgroud)

同样,过程中的局部变量也会出现同样的问题.

procedure TestCurrency;
var
  LVar: Currency;
begin
  FillChar(LVar, SizeOf(LVar), 0);
end;
Run Code Online (Sandbox Code Playgroud)

我怀疑它与FillChar编译器魔术程序有关,这Dest是一个无类型的var参数. FillChar是我发现这个问题的唯一例程.

  • 是什么导致这个问题?
  • 是否有其他类型受到影响?

为了回应不可避免的"为什么要做那个评论":我们有一个代码生成器,它使用FillChar来一般地初始化记录结构和原始类型.它适用于其他一切,但出乎意料地失败了货币.我们确实有解决方法,但了解根本原因会很好,并且知道是否还有其他因素可能会给我们带来麻烦.


编辑

根据Jeroen的回答,可以合理地得出结论,这个问题存在于Delphi的所有部分中.此外,货币阵列显然也出现了类似的问题.

大卫的回答提供了一些很好的解决方法.

要考虑的最后一个解决方法是,修改生成器以处理Currency作为特例并简单地设置Value := 0.

delphi compiler-construction delphi-2007 delphi-5 fillchar

12
推荐指数
2
解决办法
322
查看次数

与临时表中的列进行比较时,SQL排序规则发生冲突

我有一个SQL查询,它将数据库中的值与常量进行比较:

SELECT * FROM my_table
INNER JOIN #TempTable tem
    ON my_table.id = temp.id
    AND my_table.key = 'SOME STRING'
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过这个?(不对数据库进行更改)

更新:即使我删除了最后一个(字符串比较),我也会收到此错误...

sql collation

11
推荐指数
2
解决办法
3万
查看次数

在Delphi 7中的Console Application中不能使用Random方法

在Delphi中是否无法在Console Application中使用Random方法?它不会编译并显示错误:

'' 预期但'''发现

当我尝试在正常应用程序(使用Windows)中执行相同的操作时,它可以正常工作.

我正在尝试编译的整个代码在这里:

program random;

{$APPTYPE CONSOLE}

uses SysUtils;

var iRan:integer;

begin
  Randomize;
  iRan:=Random(10);
  writeln(iRan);
  readln;
end.
Run Code Online (Sandbox Code Playgroud)

delphi random

8
推荐指数
1
解决办法
176
查看次数

使用SVN和Delphi Visual Component软件包的最佳实践?

由于希望能够重现使用第三方可视化组件包的项目的给定修订版,SVN中的内容以及实现/构建SVN回购的最佳方式是什么?

对于非可视组件,规则似乎很简单,以确保不依赖于外部回购 - "没有svn-externals引用允许的任何外部回购".我有一个我控制的共享仓库,这是唯一允许的'svn-externals'参考.这使得在不同的SVN项目中使用源代码实现和共享这些类型的运行时项目变得容易.任何对此内部共享仓库的引用都是使用特定修订号的'svn-externals'.

视觉包似乎与能够轻松控制版本相反,因为它们可能必须在每个版本重新安装.如何最好地创建一个能够在以后以特定版本号重新创建的SVN项目...是否有推荐的解决方案?

以前我们并不担心第三方组件,因为它们不经常更改,我们从来没有真正好的解决方案.我想知道其他人是否已找出解决这个问题的最佳方法,因为我正在进行春季大扫除/内部重组,并希望比以前做得更好.

从技术上讲,RTL/VCL源也应该在SVN仓库中(如果发布了Delphi修补程序/服务包).

我的解决方案可能是创建一个虚拟机,其中包含特定版本的Delphi环境,并安装了所有可视控件.在我们添加/更新可视控件或使用修补程序/服务包更新Delphi时,我们会创建一个新版本的虚拟机.然后,我们将此VM版本的映像存储在某个架子上.这是你做的吗?在这种情况下,Delphi激活/许可是否运行良好(或根本没有)?

谢谢,

达里安

svn delphi version-control

7
推荐指数
1
解决办法
1474
查看次数

与朋友功能的前向声明:无效使用不完整类型

#include <iostream>

class B;

class A{
 int a;
public:
 friend void B::frndA();
};

class B{
 int b;
public:
 void frndA();
};

void B::frndA(){
 A obj;
 std::cout << "A.a = " << obj.a << std::endl;
}

int main() {
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

尝试编译此代码时,发生了一些错误.例如

无效使用不完整类型

这段代码有什么问题?

c++ forward-declaration friend-function

5
推荐指数
1
解决办法
4791
查看次数

TFS工作项 - 仅当System.AttachedFileCount> 0时才允许转换到状态

是否可以不必创建自定义控件?

我需要允许更改自定义工作项的状态,只要它至少附加了一个文件.附件控件的System.AttachedFileCount字段不支持"REQUIRED":我想将其用作转换的条件.

我试图通过添加一个自定义字段来解决这个问题,该字段仅用于复制System.AttachedCount中的值.
我在自定义字段中设置规则"COPY",以便复制工作项的附件数量.然后我可以使用规则"PROHIBITEDVALUES"= 0检查转换或状态中自定义字段的值.这可能是一种解决方法,但问题是它无法在同一状态内工作:如果我编辑工作项而不更改状态并添加一些附件,自定义字段的值不会更改.

还有其他一些规则需要尝试吗?

tfs workitem rules tfs2010 tfs-workitem

5
推荐指数
1
解决办法
2643
查看次数

终止我无法控制的线程运行代码

我正在做一个项目,我在运行时加载几个程序集,对于每个程序集,我使用反射来查找一些特定的类,实例化它们并调用它们的方法.所有这一切都运行正常,但对于某些调用,进程遇到堆栈溢出,终止了我的整个程序.我没有任何控制我正在加载的程序集的源代码,所以我无法更改我正在执行的代码.

我试图解决这个问题:

  1. 我指定一个线程来调用方法,并尝试
    在timeintervall之后中止线程(我知道这是不好的做法,但我不能更改代码以终止友好).然而,这不起作用,我认为线程是忙于"stackoverflowing"来处理中止调用.

  2. 我已经尝试减少线程可以访问的实际内存,这甚至不是一个解决方案,因为你无法捕获stackoverflow-exception所以我的程序无论如何终止(只是更快)

问题:

  1. 一个线程可以忙于中止吗?是否有某种方法可以中止具有此行为的线程?
  2. 我们怎样才能以良好的方式调用代码(我们无法控制)?

提前致谢!

c# stack-overflow multithreading assemblies

4
推荐指数
1
解决办法
128
查看次数

Windows-7登录屏幕中的CreateEvent

我问这个问题,因为事实证明在Delphi中编写一个能够从Logon屏幕运行的屏幕保护程序应用程序有一些困难.

请参阅问题:Delphi中的Windows 7登录屏幕保护程序

我已经将问题(或至少一个问题)缩小到特定的Win API调用CreateEvent.

SyncEvent := CreateEvent(nil, True, False, '');
if SyncEvent = 0 then
  RaiseLastOSError;
Run Code Online (Sandbox Code Playgroud)

此代码仅在从登录屏幕调用时失败.并且GetLastError返回拒绝访问.很明显,登录屏幕上的安全限制阻止CreateEvent(nil, True, False, '');了根据需要创建事件.

(我真的不知道一个事件如何成为可利用的安全风险.)

所以,问题是:是否可以从登录屏幕创建一个事件?大概通过以下任一方式:

  • 使用合适的 lpEventAttributes
  • 或者调用CreatingEventEx.

尽管在Delphi中遇到了这个问题,但这更多是关于Win API.所以请用您选择的语言自由回答.

delphi security winapi winlogon windows-7

4
推荐指数
1
解决办法
498
查看次数

我需要释放动态创建的表单吗?

如果我使用 TForm.CreateNew(Application) 动态创建一个 TForm 来制作一个自由浮动的窗口,我是否必须跟踪这些对象并在应用程序关闭时释放它们?

或者德尔福会在应用程序关闭时自动释放所有表单?

另外,如果我有一个自由浮动的动态创建的表单并且用户点击关闭按钮会发生什么?我需要在某处调用一些代码来释放它们吗?
如果是这样,如何?我想我不能把它放在任何表单的事件中。

delphi memory-management

4
推荐指数
1
解决办法
1260
查看次数