delphi+access权限管理设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi+access权限管理设置相关的知识,希望对你有一定的参考价值。

我在做一个物流仓库管理的程序,在设置权限管理方面遇到了一些麻烦,我们三个人,一个是管理员,两个是下属,所以想通过权限设置来限制下属的一些功能,比如说管理员能够看到的界面而下属不一定能够看到。access的数据库也写好了,就是在delphi里面写程序代码的时候遇到了一些问题,不知道怎么写,请高手指点一二。能够告诉我写权限管理的程序代码的一些基本写法吗?最好是告诉我程序代码。权限管理主要是针对哪个组件的?谢谢!!!

以前写过这样的程序。

很啰嗦的。没有找到现成的组件。

原理是对菜单、工具栏按钮,针对不同的用户设置不同的权限(Enable和Visible)。

参考技术A ACCESS没有权限之说,软件中的权限是程序员用代码规定的,比如当管理员登录时,就让所有的按钮都有作用,这当然要建立一个标志性的变量,当其它人登录时,就让某些按钮失活,比如发货员登录时就让入库操作的一些按钮失活,打不开入库登记界面.相反,当入库人登录时,就让发货的一些按钮失活.权限控制软件,用多页组件做,是最理想的了,登录的成员不同,多页组件可打开页也不同. 参考技术B 一般思路是:
1、用户的权限设置一般是字符串,不同位置的值代表不同的权限,存在数据库字段里。

2、软件启动完成后首先加在权限变量然后设置不同的菜单、按钮等等的可用状态。

3、一般在权限字段建议加密存储,并建议加密时候考虑和用户名绑定操作。
参考技术C 在DELPHI中技巧实现权限管理
  
  
在运用DELPHI编制一些应用系统时,有很多时候都需要给不同的用户赋予不同的权限,而不同的系统又有不同的权限分配方式,如果在程序中去为每一位用户分配权限的话,不仅使得程序的编制十分麻烦,而且也不利于管理!笔者近日想得一自认为比较好的方法,愿与大家共享,并望各位多指教!
  
在很多的系统中,权限通常是被分成几级的。每一级的用户所能实现的操作是不同的,而实现这一功能的方法一般都是让不同权限的用户见到不同的菜单。简单的说就是对不具有某一权限的用户这一菜单就是不可见的!为了实现这一控制,程序员们往往得花费很多的时间去做这一模块,浪费了很多宝贵的时间!
  
笔者的想法是:如果设一个二维数组,第一维代表第一级菜单,第二维代表子菜单,每一个数组元素只存储0或1这两个数,某一权限的用户对应着一个二维数组,而这个数组又代表了相应的菜单。给某一级别的用户分配权限后,他便拥有了一个相应的数组。登录时,从数组中取出各个元素的值,如果为1则相应的菜单出现,为0则不出现菜单。用这种方式不但可以分级(同一级用户的数组相同),还能实现在不同的用户间实现权限细分,只要你修改相应的数值为0或1即可!
  
上面是一个简单例子的运行结果。
  下面是部分源程序(这仅是一个解释性的例子程序),为了简便,程序中只有一个窗体和一个主菜单。在创建窗体时初始化数组M,显示时读出数组值并通过设置菜单的Enabled属性或者Visible属性的True或False来控制显示!!
  var
  
Form1:
TForm1;
  
m:array[0..1,0..4]
of
integer;//定义存储的数组
  
i,j:integer;//定义循环的变量
  implementation
  $R
*.dfm
  procedure
TForm1.FormShow(Sender:
TObject);
  begin
//读出数字并控制菜单的显示
  
for
i:=Low(m)
to
High(m)
do
  
for
j:=Low(m[i])
to
High(m[i])
do
begin
  
if
m[i][j]=0
then
MainMenu1.Items[i].Items[j].Enabled:=false
  
else
MainMenu1.Items[i].Items[j].Enabled:=true;
  end;
  end;
  procedure
TForm1.FormCreate(Sender:
TObject);
  begin
//下面是初始化
  
k:=0;
  
for
i:=Low(m)
to
High(m)
do
  
for
j:=Low(m[i])
to
High(m[i])
do
  
if
(j
mod
2)=0
then
m[i][j]:=1
  
else
m[i][j]:=0;
  end;

在 Delphi 中开发具有管理员权限的应用程序

【中文标题】在 Delphi 中开发具有管理员权限的应用程序【英文标题】:Developing Apps with Administrator Rights in Delphi 【发布时间】:2011-08-31 18:36:19 【问题描述】:

我在 Windows 7 下使用 D2010 编写一个似乎需要管理员权限的应用程序(我认为是因为它使用 COM 与第三方 .exe 通信,这也需要管理员权限)。

我已根据需要添加了清单资源,但是当我尝试从 IDE 调试应用程序时,它会报告

“无法创建进程。 请求的操作需要 海拔”

...它不会运行。如果我以管理员身份运行 Delphi,那么我的应用程序可以正常运行,但这感觉像是一种危险的蛮力方法,尤其是当我开发的大多数应用程序不需要管理员权限时。

有什么方法可以让 Delphi 在我运行我的应用程序时提示提升,而不是让整个 IDE 运行提升?

【问题讨论】:

当您需要为 that 应用程序工作时以管理员身份启动 IDE 并在处理其他应用程序时以普通用户身份启动它有什么问题?我就是这么做的! @Cosmin,谢谢。似乎这可能是最好的方法。 这是正常行为,调试器无法调试提升的被调试对象,∴必须在启动调试会话之前提升。 【参考方案1】:

UAC 还会捕获名称中或许多版本资源字段中包含“设置”、“更新”或“安装”字样的任何应用程序。 (公司名称、应用名称、描述等。 它认为任何此类应用程序都是潜在的“安装程序”应用程序,因此必须以管理员权限运行。

听起来很疯狂,但这是真的。请参阅此document 中的“安装程序检测”部分。

您可以通过包含一个表明它不需要管理员权限的清单来解决此问题。

【讨论】:

欢迎来到 ***,@Phil。你真的读过这个问题吗?您的答案看起来与所问的内容无关。 我明白你的意思。我正在添加有关 UAC 的相关信息,因为有人提出了该主题。它实际上并没有回答这个问题。道歉。 不要道歉,这是一个很好的答案,对于一个非常不同的问题。所以想法是对特定问题有特定的答案,所以积累“相关的东西”并不是这里的真正目标,无论如何我们都有谷歌这样做;) 这简直太愚蠢了。我遇到了同样的问题,只是突然开始需要抬高。将名称从 Updater.exe 更改为 Yoo.exe,它开始没有任何问题。 :P【参考方案2】:

没有,它也不适用于VS:

https://***.com/questions/3265787/how-do-i-debug-an-process-as-elevated-with-visual-studio-2008-sp1-on-windows-7

我想您可以运行提升的远程调试器并使用远程调试附加 IDE。

它不起作用,因为该进程正在作为另一个用户(或使用另一个用户令牌)运行。

IDE 正在尝试使用 CreateProcess 运行调试过程,但在应用程序需要 elavation 时会失败,可以在本文中找到更多详细信息:

http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

RAD Studio 可以使用带有“runas”动词的 ShellExecute 运行应用程序,但这仍然不能解决“在其他用户上下文下调试过程”的问题。

换句话说:提升的进程只能由提升的调试器调试。

编辑:

Delphi XE2 IDE 是 32 位的,只能通过远程调试器(巧妙地对用户隐藏)来调试 64 位应用程序。

我猜想 Embarcadero 可以用类似的方式调试提升的应用程序。

【讨论】:

我不明白这个答案。当我读到它时,您说即使 IDE 运行提升,它也无法使用 requiredAdministrator 清单调试进程。我对你的理解正确吗?我认为我不能正确理解您,因为该陈述是错误的。 @David:我说过调试应用程序 可以由 IDE 提升,但是 IDE 仍然无法附加到应用程序。我编辑了相应的句子以澄清。 所以你的答案可以归结为“提升的进程只能由提升的调试器调试”?对吗? @David:没错。我已将您的陈述添加到答案中。【参考方案3】:

我知道调试此类应用程序的唯一方法是以管理员身份运行 IDE。我不建议例行执行此操作,仅用于调试会话。

【讨论】:

如果可行,您还应该将应用程序拆分为两个独立的部分:一个作为正常的“AsInvoker”进程运行,另一个需要提升。然后,您应该将“UAC 屏蔽”添加到启动其他进程的按钮中,这就是 UAC 的实现方式。然后,您只需提升 IDE 即可调试“RequireAdministrator”进程。【参考方案4】:

实际上,可以从具有“正常级别访问”的进程中调试具有“更高级别访问”的进程。

至少在 Windows XP 之前,将您的用户帐户添加到 Debugger Users 组就足以调试正在运行的进程,例如具有Administrator 权限。

这根本无法解决 Delphi 2010 运行进程的问题,但如果您尝试将调试器附加到已运行的进程,可能会很有用。

我认为这不适用于启用 UAC 的 Vista+,但我想我还是会提到它。 :)

确切地说,UAC 拆分令牌概念禁用了SeDebugPrivilege

http://blogs.msdn.com/b/greggm/archive/2006/03/30/565303.aspx

http://blogs.msdn.com/b/mithuns/archive/2006/04/04/568291.aspx

【讨论】:

【参考方案5】:

以管理员身份运行 Delphi(任何版本)。

您也可以更改 Delphi 快捷方式属性(始终以管理员身份运行)。

【讨论】:

以上是关于delphi+access权限管理设置的主要内容,如果未能解决你的问题,请参考以下文章

delphi仓库管理系统,权限不知道怎么做! 给点思路。。。

用access打开*.mdb数据库时,提示没有权限,让管理员设置适当的权限,有高手吗,我在线等

ACCESS数据库权限问题。

在 Delphi 中开发具有管理员权限的应用程序

odoo中的权限管理

如何在Oracle数据库中设置权限