Как я могу ограничить использование таблиц в базе данных SQL Server пользователями из графического интерфейса пользователя? - PullRequest
0 голосов
/ 31 марта 2019

Этот вопрос является продолжением предыдущего вопроса, который у меня был: Как добавить новых пользователей в базу данных сервера SQL через графический интерфейс пользователя JAVA

В настоящее время мой вопрос: как я могу ограничить создание таблиц пользователями, созданными на сервере SQL, из графического интерфейса пользователя?

Ниже приведен код, над которым я сейчас работаю:

public class Users extends JFrame {



    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    int resultSetInt;


    private JTable table;

    private JPanel contentPane;
    private JTextField UsernametextField;
    private JTextField PasswordtextField;
    private JCheckBox chckbxProducts;

    public static final String DATABASE_URL = "jdbc:sqlserver://MYSERVER";

    public String username = null;
    public String password = null;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Users frame = new Users();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Users() {

        setTitle("Add a User");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 360, 523);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(10, 11, 323, 462);
        contentPane.add(panel);
        panel.setLayout(null);

        UsernametextField = new JTextField();
        UsernametextField.setBounds(10, 100, 115, 25);
        panel.add(UsernametextField);
        UsernametextField.setColumns(10);

        JLabel lblUsername = new JLabel("Username");
        lblUsername.setFont(new Font("Tahoma", Font.BOLD, 20));
        lblUsername.setBounds(10, 60, 115, 25);
        panel.add(lblUsername);

        JLabel lblPassword = new JLabel("Password");
        lblPassword.setFont(new Font("Tahoma", Font.BOLD, 20));
        lblPassword.setBounds(10, 144, 115, 25);
        panel.add(lblPassword);

        PasswordtextField = new JTextField();
        PasswordtextField.setBounds(10, 184, 115, 25);
        panel.add(PasswordtextField);
        PasswordtextField.setColumns(10);

        JLabel lblUser = new JLabel("Add New User:");
        lblUser.setFont(new Font("Tahoma", Font.BOLD, 22));
        lblUser.setBounds(10, 11, 166, 25);
        panel.add(lblUser);

        JSeparator separator = new JSeparator();
        separator.setBounds(0, 47, 323, 2);
        panel.add(separator);

        JButton btnNewButton = new JButton("Enter");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                try {

                    connection = DriverManager.getConnection(AdminMenu.DATABASE_URL, AdminMenu.UserName, AdminMenu.Password);
                    statement = connection.createStatement();

                    String username = "";
                    String password = "";
                    username = UsernametextField.getText().trim();
                    password = PasswordtextField.getText().trim();



                    if (username.equals("")|| password.equals(""))
                    {
                        JOptionPane.showMessageDialog(null," name or password is wrong","Error",JOptionPane.ERROR_MESSAGE);
                    }
                    else
                    {



                        resultSetInt = statement.executeUpdate("CREATE LOGIN "+username+" WITH PASSWORD = '"+password+"'");
                        resultSetInt = statement.executeUpdate("IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'"+username+"') CREATE USER ["+username+"] FOR LOGIN ["+username+"] EXEC sp_addrolemember N'db_owner', N'"+username+"'");

                        //("CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD' GO USE BEPAWI GO IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName') BEGIN CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]  EXEC sp_addrolemember N'db_owner', N'NewAdminName' END;) VALUES('"+username+"', '"+password+"');");

                        String SMessage = "Record added for "+username;

                                           // create dialog ox which is print message
                            JOptionPane.showMessageDialog(null,SMessage,"Message",JOptionPane.PLAIN_MESSAGE);
                        //close connection

                    }


                    if (chckbxProducts.isSelected()) {
                        //System.out.println("Is selected");
                        resultSetInt = statement.executeUpdate("GRANT INSERT, SELECT ON dbo.Products TO ["+username+"]");
                        }
                    else {
                        //System.out.println("Is not Selected");
                        resultSetInt = statement.executeUpdate("REVOKE INSERT, SELECT ON dbo.Products FROM ["+username+"]");
                    }

                    ((java.sql.Connection)connection).close();
                    }

                catch (SQLException se) 
                {
                    //handle errors for JDBC
                    se.printStackTrace();
                }
                catch (Exception a) //catch block
                {
                    a.printStackTrace();
                }

            }
        });

        /*
        chckbxProducts.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {

                try {

                String username = "";

                username = UsernametextField.getText().trim();

                if (e.getStateChange() == 1) {
                        resultSetInt = statement.executeUpdate("GRANT INSERT, SELECT ON dbo.Products TO ["+username+"]");

                } else {
                        resultSetInt = statement.executeUpdate("REVOKE INSERT, SELECT ON dbo.Products FROM ["+username+"]");
                }

                ((java.sql.Connection)connection).close();
            }

        catch (SQLException se) 
        {
            //handle errors for JDBC
            se.printStackTrace();
        }
        catch (Exception a) //catch block
        {
            a.printStackTrace();
        }

            }
        }); */


        btnNewButton.setFont(new Font("Tahoma", Font.BOLD, 20));
        btnNewButton.setBounds(207, 420, 106, 33);
        panel.add(btnNewButton);

        JCheckBox chckbxProducts = new JCheckBox("Products Table");
        chckbxProducts.setBounds(10, 280, 115, 23);
        panel.add(chckbxProducts);

        JCheckBox chckbxClients = new JCheckBox("Clients Table");
        chckbxClients.setBounds(10, 310, 115, 23);
        panel.add(chckbxClients);

        JCheckBox chckbxOrders = new JCheckBox("Orders Table");
        chckbxOrders.setBounds(10, 340, 115, 23);
        panel.add(chckbxOrders);

        JCheckBox chckbxInvoices = new JCheckBox("Invoices Table");
        chckbxInvoices.setBounds(10, 370, 115, 23);
        panel.add(chckbxInvoices);

        JLabel lblNewLabel = new JLabel("Table Access:");
        lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 22));
        lblNewLabel.setBounds(10, 235, 166, 25);
        panel.add(lblNewLabel);

        JCheckBox chckbxShipping = new JCheckBox("Shipping Orders Table");
        chckbxShipping.setBounds(140, 280, 160, 23);
        panel.add(chckbxShipping);

        JCheckBox chckbxLocations = new JCheckBox("Locations Table");
        chckbxLocations.setBounds(140, 310, 160, 23);
        panel.add(chckbxLocations);


    }
}

Как вы можете видеть, пользователь должен добавить нового пользователя и пароль, а затем установить флажки, которые он хочет, чтобы у нового пользователя был либо доступ, либо отсутствие доступа к таблице.

Я могу добавлять новых пользователей в базу данных сервера SQL; но я получаю следующее сообщение об ошибке:

java.lang.NullPointerException
    at Users$2.actionPerformed(Users.java:154)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Это в значительной степени происходит.

Я ценю вашу помощь и еще раз спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...