⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usermanager.pas

📁 MysqlFront的源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit usermanager;


// -------------------------------------
// HeidiSQL
// Usermanager
// -------------------------------------


interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, CheckLst, ImgList, ExtCtrls, Registry, ZDataset;
  // winsock

type
  TUserManagerForm = class(TForm)
    PageControl1: TPageControl;
    TabSheetAddUser: TTabSheet;
    DBUserTree: TTreeView;
    EditUser: TEdit;
    EditPassword: TEdit;
    EditHost: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    CheckListBoxPrivileges: TCheckListBox;
    CheckBoxAllPrivileges: TCheckBox;
    Label8: TLabel;
    CheckBoxWithGrant: TCheckBox;
    Label9: TLabel;
    ImageList1: TImageList;
    Bevel1: TBevel;
    CheckBoxCreateAccount: TCheckBox;
    EditDescription: TEdit;
    Label1: TLabel;
    TabSheetEditUsers: TTabSheet;
    Panel1: TPanel;
    CheckListBoxPrivs: TCheckListBox;
    Label13: TLabel;
    LabelColumn: TLabel;
    LabelTable: TLabel;
    LabelDB: TLabel;
    Label12: TLabel;
    Label11: TLabel;
    LabelPrivileges: TLabel;
    Panel2: TPanel;
    Label2: TLabel;
    TreeViewUsers: TTreeView;
    ButtonSelectAll: TButton;
    ButtonSelectNone: TButton;
    ButtonSet: TButton;
    LabelPleaseSelect: TLabel;
    LabelNoPrivs: TLabel;
    ButtonSelectPrivileges: TButton;
    Panel3: TPanel;
    ButtonClose: TButton;
    ButtonAddUser: TButton;
    LabelUser: TLabel;
    ButtonRevoke: TButton;
    Panel4: TPanel;
    ButtonEditUser: TButton;
    Button1: TButton;
    procedure ButtonCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CheckBoxAllPrivilegesClick(Sender: TObject);
    procedure ButtonAddUserClick(Sender: TObject);
    procedure CheckBoxCreateAccountClick(Sender: TObject);
    procedure TreeViewUsersDblClick(Sender: TObject);
    procedure TreeViewUsersChange(Sender: TObject; Node: TTreeNode);
    procedure PageControl1Change(Sender: TObject);
    procedure ButtonSelectAllClick(Sender: TObject);
    procedure ButtonSelectNoneClick(Sender: TObject);
    procedure ShowPrivilegesControls(v,w,y: Boolean);
    procedure ButtonSelectPrivilegesClick(Sender: TObject);
    procedure ShowPrivs(node: TTreeNode);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ButtonSetClick(Sender: TObject);
    procedure CheckListBoxPrivsClickCheck(Sender: TObject);
    procedure ButtonRevokeClick(Sender: TObject);
    procedure ButtonEditUserClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure GetResUsers;
    procedure GetResDBs;
    procedure GetResTables;
    procedure GetResColumns;

  private
    { Private declarations }
    editcurrent           : Boolean;
  public
    { Public declarations }
    User, Host            : String; // Remember for setting privileges
    ZQueryDBs, ZQueryTables, ZQueryColumns, ZQueryUsers, ZQueryF : TZReadOnlyQuery;
  end;

var
  UserManagerForm: TUserManagerForm;


implementation


uses
  main, childwin, helpers, edituser;


const
  crlf = #13#10;
{$R *.DFM}


procedure TUserManagerForm.ButtonCloseClick(Sender: TObject);
begin
  close;
end;


procedure TUserManagerForm.FormShow(Sender: TObject);
var
  i,j        : Integer;
  tntop, tn1, tn2, tnu1, tnu2, tnu3 : TTreeNode;

//  wsadat : WSAData;
//  host : String;
//  ph : PHostEnt;
begin
  Screen.Cursor := crHourglass;
  DBUserTree.Items.Clear;
  TreeViewUsers.Items.Clear;
  ShowPrivilegesControls(false, true, false);

  tnu1 := DBUserTree.Items.Add(nil, 'Global Access');
  tnu1.ImageIndex := 13;
  tnu1.SelectedIndex := 6;
  with TMDIChild(Application.Mainform.ActiveMDIChild) do
  begin
    DBUserTree.Images := ImageList1;
    tntop := tnodehost;  // tnodehost on childwin
    tn1 := tntop.GetFirstChild;
    for i:=0 to tntop.Count-1 do
    begin
      tnu2 := DBUserTree.Items.AddChild(tnu1, tn1.Text);
      tnu2.ImageIndex := 12;
      tnu2.SelectedIndex := 0;
      for j:=0 to tn1.Count-1 do
      begin
        tn2 := tntop.Item[i].Item[j];
        tnu3 := DBUserTree.Items.AddChild(tnu2, tn1.Text + '.' + tn2.Text);
        tnu3.ImageIndex := 1;
        tnu3.SelectedIndex := 11;
      end;
      tn1 := tntop.getNextChild(tn1);

      TreeViewUsers.Images := ImageList1;
    end;
    EditUser.Text := ZConn.User;

  end;
  tnu1.Expand(false);
  tnu1.Selected := true;

  with CheckListBoxPrivileges do
    for i:=0 to 8 do
      Checked[i] := true;

  PageControl1.OnChange(self);

{
  // get users hostname
  WSAStartup(MAKEWORD(1, 1), wsadat);
  gethostname(pchar(host), 80);
  ph := gethostbyname(pchar(host));
  EditHost.Text := ph.h_name;
  WSACleanup();
}
  ZQueryDBs := TZReadOnlyQuery.Create(self);
  ZQueryDBs.Connection := TMDIChild(Application.Mainform.ActiveMDIChild).ZConn;

  ZQueryTables := TZReadOnlyQuery.Create(self);
  ZQueryTables.Connection := TMDIChild(Application.Mainform.ActiveMDIChild).ZConn;

  ZQueryColumns := TZReadOnlyQuery.Create(self);
  ZQueryColumns.Connection := TMDIChild(Application.Mainform.ActiveMDIChild).ZConn;

  ZQueryUsers := TZReadOnlyQuery.Create(self);
  ZQueryUsers.Connection := TMDIChild(Application.Mainform.ActiveMDIChild).ZConn;

  ZQueryF := TZReadOnlyQuery.Create(self);
  ZQueryF.Connection := TMDIChild(Application.Mainform.ActiveMDIChild).ZConn;

  Screen.Cursor := crDefault;
end;

procedure TUserManagerForm.CheckBoxAllPrivilegesClick(Sender: TObject);
begin
  CheckListBoxPrivileges.Enabled := not CheckBoxAllPrivileges.Checked;
end;

procedure TUserManagerForm.ButtonAddUserClick(Sender: TObject);
var
  i : Integer;
  priv, query, access, fromhost, pass, grant : String;
begin
  // Account
  if CheckBoxCreateAccount.Checked then
  with TRegistry.Create do
  begin
    OpenKey(regpath + '\Servers\', false);
    if KeyExists(EditDescription.Text) then
    begin
      MessageDlg('This Description (' + EditDescription.Text + ') is already used.' + crlf + 'Please specify another description!', mtError, [mbOK], 0);
      EditDescription.SetFocus;
      exit;
    end
    else with TRegistry.Create do
    begin
      OpenKey(regpath + '\Servers\' + EditDescription.Text, true);
      WriteString('Host', TMDIChild(Application.Mainform.ActiveMDIChild).ZConn.HostName);
      WriteString('User', EditUser.Text);
      WriteString('Password', encrypt(EditPassword.Text));
      WriteString('Port', IntToStr(TMDIChild(Application.Mainform.ActiveMDIChild).ZConn.Port));
      WriteString('Timeout', '30');
      WriteBool('Compressed', false);
      WriteString('OnlyDBs', '');
      CloseKey;
    end;
  end;

  priv := '';
  if CheckBoxAllPrivileges.Checked then
    priv := 'ALL PRIVILEGES'
  else
    with CheckListBoxPrivileges do
      for i:=0 to Items.Count - 1 do
        if Checked[i] then
        begin
          if priv <> '' then
            priv := priv + ', ';
          priv := priv + Items[i];
        end;
  if priv = '' then
    priv := 'USAGE';

  case DBUserTree.Selected.Level of
    0 : access := '*.*';
    1 : access := DBUserTree.Selected.Text + '.*';
    2 : access := DBUserTree.Selected.Text;
  end;

  if EditHost.Text = '' then
    fromhost := '%'
  else
    fromhost := EditHost.Text;

  if EditPassWord.Text <> '' then
    pass := ' IDENTIFIED BY ''' + EditPassWord.Text + '''';

  if CheckBoxWithGrant.Checked then
    grant := ' WITH GRANT OPTION';

  query := 'GRANT ' + priv + ' ON ' + access + ' TO ''' + EditUser.Text + '''@''' + fromhost + '''' + pass + grant;
  TMDIChild(Application.Mainform.ActiveMDIChild).ExecQuery(query);
  TMDIChild(Application.Mainform.ActiveMDIChild).ExecQuery('FLUSH PRIVILEGES');
  ShowMessage('User succesfully created.');
end;


procedure TUserManagerForm.CheckBoxCreateAccountClick(Sender: TObject);
begin
  Label1.Enabled := CheckBoxCreateAccount.Checked;
  EditDescription.Enabled := CheckBoxCreateAccount.Checked;
  if (CheckBoxCreateAccount.Checked) and (EditDescription.Text = '') then
  begin
    EditDescription.Text := TMDIChild(Application.Mainform.ActiveMDIChild).Caption;
    EditDescription.SetFocus;
  end;
end;


procedure TUserManagerForm.TreeViewUsersDblClick(Sender: TObject);
var
  tnu, tndb, tntbl      : TTreeNode;
  i                     : Integer;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -